PAT_B_结构-05. 有理数均值(20)

 时间限制

 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;
}




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值