不如来21玩一局?
时间: 1ms 内存:128M
描述:
又是一年毕业季,校吧内掀一起了一阵吧聚狂潮。大家聚到21,聊聊天,秀秀ID,玩玩游戏。
墨尔本为了显示高大上,推荐了这样一个游戏,假设把平地看成一个坐标轴,让三个大吧分别站在(0,0)(a,b)(c,0)的位置,两两之间拉一根直线, 然后让其他人站在里面,但是有一个要求,只能站在整数格点上(即x,y坐标都是整数),如果线穿过了某些整数格点,则人不能站在上面。现在由墨尔本随意说 a,b,c的值,你能帮忙确定能有多少人能够站在围成的图形内吗?
输入:
输入三个整数a,b,c.并且0<=a<=30000,0<b<=30000,0<c<10^5;
输出:
输出只有一行,包含一个整数,代表能站在围成的图形内的人数
示例输入:
5 6 7
示例输出:
17
提示:
参考答案(内存最优[1092]):
/*#include<iostream>
#include<cmath>
using namespace std;
int Gcd(int n,int m)
{
int x=n%m;
while(x!=0)
{
n=m;
m=x;
x=n%m;
}
return m;
}
int main()
{
int a,b,c;
cin>>a>>b>>c;
int ans;
ans=(c*a)/2;
int l1,l2,l3;
l1=Gcd(a,b);
l2=Gcd(a,fabs(b-c));
cout<<ans-(l1+l2)/2+1<<endl;
}*/
#include<cstdio>//s=l/2+n-1;
#include<cmath>
#include<cstdlib>
int a,b,c,d,e,f;
int area()
{
return abs((a*d+c*f+b*e-a*f-b*c-d*e)/2);
}
int gcd(int x,int y)
{
if(y==0)
return x;
else
return gcd(y,x%y);
}
int main ()
{
int k=0;
scanf("%d%d%d",&c,&d,&e);
a=b=f=0;
int s=area();
int l1=gcd(abs(a-c),abs(b-d));
int l2=gcd(abs(a-e),abs(b-f));
int l3=gcd(abs(c-e),abs(d-f));
printf("%d\n",s-(l1+l2+l3)/2+1);
return 0;
}
参考答案(时间最优[0]):
#include <iostream>
using namespace std;
int main()
{
float a,b,c,x1,x2;
int i,j,n=0,x3,x4;
cin>>a>>b>>c;
for(i=1;i<b;i++)
{
x1=i*(a/b);
x2=((a-c)/b)*i+c;
x3=int(x1);
x4=int(x2);
if(x4==x2)
n=n+x4-x3-1;
else
n=n+x4-x3;
}
cout<<n<<endl;
return 0;
}
题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。