问题解决:
这个化简两个分数的思路,需要掌握呀
输入格式:
输入第一行给出正整数N(≤100);第二行中按照a1/b1 a2/b2 …
的格式给出N个分数形式的有理数,其中分子和分母全是整形范围内的整数;如果是负数,则负号一定出现在最前面。
输出格式:
在一行中按照a/b
的格式输出N个有理数的平均值。注意必须是该有理数的最简分数形式,若分母为1,则只输出分子。
输入样例1:
4
1/2 1/6 3/6 -5/10
输出样例1:
1/6
输入样例2:
2
4/3 2/3
输出样例2:
1
我的思路写进代码注释里了,需要的朋友可以看看
#include<stdio.h>
int Gong_yue_shu(int a,int b)
{
int r;
while(a%b)
{
if(a%b!=0)
{
r=a%b;
a=b;
b=r;
}
}
return b;
}
int main()
{
int n,i,a,b,sum=0,ret=1,r;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d/%d",&a,&b);
if(a==0||b==0) continue;
sum=sum*b+ret*a;
ret*=b;
if(i==n-1)
ret*=n;
//最后一项之后,(分母*n)相当于*(1/n)取平均值
r=Gong_yue_shu(sum,ret);
sum/=r;
ret/=r;
//这一步叫做化简(同时除以最大公约数)
}
//接下来:进行输出判断就行了
if(sum==0) printf("0");
else if(ret==1) printf("%d",sum);
else printf("%d/%d",sum,ret);
return 0;
}
其实他这个思路每天看看,连着4天,就是自己的了