• #020PAT 没整明白的题L1-009 N个数求和 (20 分)


    后面的测试点过不去,两个错误一个超时。
    目前未解决
     
    L1-009 N个数求和 (20 分)
     

    本题的要求很简单,就是求N个数字的和。麻烦的是,这些数字是以有理数分子/分母的形式给出的,你输出的和也必须是有理数的形式。

    输入格式:

    输入第一行给出一个正整数N≤100)。随后一行按格式a1/b1 a2/b2 ...给出N个有理数。题目保证所有分子和分母都在长整型范围内。另外,负数的符号一定出现在分子前面。

    输出格式:

    输出上述数字和的最简形式 —— 即将结果写成整数部分 分数部分,其中分数部分写成分子/分母,要求分子小于分母,且它们没有公因子。如果结果的整数部分为0,则只输出分数部分。

    输入样例1:

    5
    2/5 4/15 1/30 -2/60 8/3
    

    输出样例1:

    3 1/3
    

    输入样例2:

    2
    4/3 2/3
    

    输出样例2:

    2
    

    输入样例3:

    3
    1/3 -1/6 1/8
    

    输出样例3:

    7/24

     1 #include<stdio.h>
     2 int main(){
     3   int x;
     4   int y[100][2];
     5   int sum1=0;//整数
     6   int sum2[2];//分数
     7   char c;
     8   scanf("%d",&x);
     9 //     printf("个数%d
    ",x);
    10   int i=0;
    11   for(i=0;i<x;i++){
    12       
    13     scanf("%d",&y[i][0]);
    14     
    15     c=getchar();
    16     if(c=='/')
    17     scanf("%d",&y[i][1]);
    18     else y[i][1]=1;
    19   //            printf("接收%d/%d
    ",y[i][0],y[i][1]);
    20   }
    21   sum2[0]=y[0][0];
    22   sum2[1]=y[0][1];
    23   int z=1; 
    24   for(z=1;z<x;z++){//计算相加 
    25       //printf("个数%d
    ",x);
    26       //printf("y1 %d y2 %d
    ",y[z][0],y[z][1]);
    27    //1.加
    28    sum2[0]=sum2[0]*y[z][1]+y[z][0]*sum2[1];
    29    sum2[1]=sum2[1]*y[z][1];
    30       //    printf("jia后%d /%d
    ",sum2[0],sum2[1]);
    31    //2.有理化 
    32    while(sum2[0]>=sum2[1]){
    33        sum2[0]-=sum2[1];
    34        sum1++;
    35        //printf("有理化后%d /%d
    ",sum2[0],sum2[1]);
    36        if(sum2[0]==0){
    37            sum2[1]==0;
    38            break;
    39        }
    40    } 
    41    //3. 约分 
    42    if(sum2[1]!=0){
    43            int n;
    44        for(n=1;n<=sum2[0];n++){
    45            if(sum2[0]%n==0&&sum2[1]%n==0){
    46                sum2[0]/=n;
    47                sum2[1]/=n;
    48       //         printf("约束%d
    ",n);
    49            }
    50         //        printf("约分后%d /%d
    ",sum2[0],sum2[1]);
    51        }
    52    }
    53    
    54   }
    55   //输出结果 
    56   if(sum1!=0){
    57       printf("%d",sum1);
    58       if(sum2[0]!=0){
    59           printf(" ");
    60       }
    61   } 
    62   if(sum2[0]!=0){
    63       printf("%d/%d",sum2[0],sum2[1]);
    64   }
    65   
    66   return 0;
    67 }
     
  • 相关阅读:
    数据库的创建,数据的增删改查
    Ubuntu系统下查看显卡相关信息
    分布式文件系统测试方法与测试工具
    分布式存储产品的测试实践及心得
    sql注入
    web测试项目总结
    Ubuntu系统下使用Jenkins进行项目的自动构建还是项目回滚方法
    Ubuntu系统下Jenkins的git构建基本方法
    Ubuntu系统下在github中新增库的方法
    ADO.NET复习总结(2)--连接池
  • 原文地址:https://www.cnblogs.com/hx97/p/10625463.html
Copyright © 2020-2023  润新知