时间限制
400 ms
内存限制
32000 kB
代码长度限制
8000 B
判题程序
Standard
作者
乔林(清华大学)
本题要求编写程序,计算N个有理数的平均值。
输入格式:
输入第1行给出正整数N(<=100);第2行中按照“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 <iostream>
using namespace std;
struct Data
{
int fengzi;
int fengmu;
};
int gcd(int m, int n) {
int r;
if(m == 0 && n == 0)
return 0;
if(m == 0)
return n;
if(n == 0)
return m;
while(1) {
r = m % n;
if(r == 0)
break;
m = n;
n = r;
}
return n;
}
int main(int argc, const char * argv[])
{
Data data[100],result;
int n,m;
scanf("%d",&n);
for (int i=0; i<n; i++) {
scanf("%d/%d",&data[i].fengzi,&data[i].fengmu);
}
result=data[0];
for (int i=1; i<n; i++) {
result.fengzi=result.fengzi*data[i].fengmu+data[i].fengzi*result.fengmu;
result.fengmu*=data[i].fengmu;
}
result.fengmu*=n;
m=gcd(result.fengmu,result.fengzi);
if (m!=0) {
result.fengmu/=m;
result.fengzi/=m;
}
if (result.fengmu==1) {
printf("%d\n",result.fengzi);
}
else if(result.fengzi==0)
{
printf("%d\n",result.fengzi);
}
else
{
printf("%d/%d\n",result.fengzi,result.fengmu);
}
return 0;
}