本题要求编写程序,计算N个有理数的平均值。
输入格式:
输入第一行给出正整数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>
#include<math.h>
#include<string.h>
int min(int x,int y){
if(x>y)return y;
else return x;
}
int main()
{
int n,sum=1,sumz=0,i,j,q,p,a[1000]={0},b[1000]={0};
char as[401],s;
scanf("%d",&n);
for(i=1;i<=n;i++){
scanf("%d/%d",&q,&p);
sum=sum*p;
a[i]=q;
b[i]=p;
//printf("%d %d",a[i],b[i]);
}
for(i=1;i<=n;i++){
a[i]=a[i]*(sum/b[i]);
sumz+=a[i];
}
//printf("%d",sumz);
if (sumz==0){
printf("0");return 0;
}
sum=sum*n;
for(j=2;j<=(min(sumz,sum));j++){
if((sumz%j==0)&&(sum%j==0)){
sumz=sumz/j;
sum=sum/j;
j--;
}
}
if(sumz%sum==0&&(sumz/sum%n==0))printf("%d",sumz/sum/n) ;
else
printf("%d/%d",sumz,sum);
return 0;}