能力值:
( LV9,RANK:170 )
|
-
-
2 楼
小朋友,你要好好学习打好基础呀,这题应该考的是最大公约数和最小公倍数的问题,我直接在你的代码上面加的代码,很久没有玩过了,代码和算法我也懒得优化了.不过已经AC了!
#include <stdio.h> // 最大公约数 int gcd(int a, int b) { int r = 1; while(r != 0) { r = a%b; a = b; b = r; } return a; }
int lcm(int a,int b) { int temp_lcm; temp_lcm=a*b/gcd(a,b); //最小公倍数等于两数之积除以其最大公约数 return temp_lcm; }
int main(void) { int n, a,b,c,d,i,x,y; int nLcm, nGcd ; while(EOF != scanf("%d\n",&n)) { for(i=1;i<=n;i++) { scanf("%d %d %d %d",&a,&b,&c,&d); nLcm = lcm(b, d) ; x=a*(nLcm/b)+c*(nLcm/d) ; nGcd = gcd (x, nLcm); x /= nGcd ; y = nLcm / nGcd ; printf("%d %d\n",x,y); } } return 0; }
已经AC了!
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
j应该递减。。。
比如分子分母公约数4,如果递增,先除以2,还可以除2,但是j已经跳过2了。。。
如果j递减应该就不会出现上述问题了。。。
|
能力值:
( LV3,RANK:20 )
|
-
-
4 楼
比较懒,把你的代码加一句话就过了。。
#include<stdio.h>
int main(void)
{
int n, a,b,c,d,i,j,x,y;
while(scanf("%d\n",&n)!=EOF)
{
for(i=1;i<=n;i++)
{
scanf("%d %d %d %d",&a,&b,&c,&d);
x=a*d+b*c;
y=b*d;
for(j=2;j<=x;j++)
{
if(x%j==0&&y%j==0)
{
{x=x/j;y=y/j;}
j--;
}
}
printf("%d %d\n",x,y);
}
}
return 0;
}
|
能力值:
( LV9,RANK:170 )
|
-
-
5 楼
嗯,AC了!
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
谢谢,已经ac了。
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
公式都忘了,唉……
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
顶,好贴
|
|
|