7-35 有理數均值 (20 分)
在做這個題的時候,開始的時候一直用for循環來找公因子,但是第三個測試點一直過不去。
然後我在網上搜搜了搜資料發現,我和AC的不同只是在尋找約數的方法上,他們用的是輾轉相除法來求最大公約數,我修改程序後成功通過。
AC 代碼
#include <stdio.h>
#include <stdlib.h>
int divsor(int a,int b);
int main()
{
int n;
int g;
int mol[100] = {0};
int deno[100] = {0};
int mol0=0,deno0=1;
scanf("%d",&n);
for(int i=0;i<n;i++) scanf("%d/%d",&mol[i],&deno[i]);
for(int i=0;i<n;i++){
mol0 = mol0*deno[i] + mol[i]*deno0;
deno0 = deno0*deno[i];
g = divsor(mol0,deno0);
mol0 /= g;
deno0 /= g;
}
deno0 *= n;
g = divsor(mol0,deno0);
mol0 /= g;
deno0 /= g;
if(mol0 == 0)
printf("%d\n", mol0);
else if(deno0 == 1)
printf("%d\n", mol0);
else
printf("%d/%d\n", mol0, deno0);
//printf("%d\n",gcd(480,2880));
return 0;
}
int divsor(int a,int b)
{
int max,min;
while(1){
if(a == 0 || b == 0) return 1;
max = (a>b)?a:b;
min = (a>b)?b:a;
a = max%min;
b = min;
if(a == 0 || b == 0) return (a>b)?a:b;
else if(max%min == max) return 1;
}
}