Openjudge-计算概论(A)-分数求和

描述:

输入n个分数并对他们求和,并用最简形式表示。所谓最简形式是指:分子分母的最大公约数为1;若最终结果的分母为1,则直接用整数表示。

如:5/6、10/3均是最简形式,而3/6需要化简为1/2, 3/1需要化简为3。

分子和分母均不为0,也不为负数。

输入第一行是一个整数n,表示分数个数,1 <= n <= 10;
接下来n行,每行一个分数,用"p/q"的形式表示,不含空格,p,q均不超过10。输出输出只有一行,即最终结果的最简形式。若为分数,用"p/q"的形式表示。样例输入

2
1/2
1/3

样例输出

5/6思路:和普通数学算法一样,先通分(传入最小公倍数函数),再加减,最后化简(传入最大公约数函数)代码如下(本代码来自我的老师:http://www.cnblogs.com/huashanqingzhu/p/3448694.html):
 1 #include<stdio.h>
 2 struct fraction//分子分母结构体
 3 {
 4     int a,b;
 5 };
 6 int Gcd(int a,int b);//最大公约数
 7 int Lcm(int a,int b);//最小公倍数
 8 int main()
 9 {
10     int n,i,d;
11     struct fraction f1,f2;
12     char c;
13     scanf("%d",&n);
14     scanf("%d%c%d",&f2.a,&c,&f2.b);
15     d=Gcd(f2.a,f2.b);
16     if(d>1)
17     {
18         f2.a=f2.a/d;
19         f2.b=f2.b/d;
20     }
21     for(i=2;i<=n;i++)
22     {
23         scanf("%d%c%d",&f1.a,&c,&f1.b);
24         d=Lcm(f2.b,f1.b);
25         f2.a=f2.a*d/f2.b+f1.a*d/f1.b;
26         f2.b=d;
27         d=Gcd(f2.a,f2.b);
28         if(d>1)
29         {
30             f2.a=f2.a/d;
31             f2.b=f2.b/d;
32         }
33     }
34     if(f2.b>1)
35         printf("%d/%d\n",f2.a,f2.b);
36        else
37            printf("%d\n",f2.a);
38     return 0;
39 }
40 int Gcd(int a,int b)
41 {
42     int c;
43     if(a<=0||b<=0) return -1;
44     if(a<b)
45     {
46         c=a;
47         a=b;
48         b=c;
49     }
50     c=a%b;
51     while(c!=0)
52     {
53         a=b;
54         b=c;
55         c=a%b;
56     }
57     return b;
58 }
59 int Lcm(int a,int b)
60 {
61     int c;
62     if(a<=0||b<=0) return -1;
63     c=Gcd(a,b);
64     return a*b/c;
65 }
时间: 02-16

Openjudge-计算概论(A)-分数求和的相关文章

计算概论(A)/基础编程练习2(8题)/7:整数的个数

1 #include<stdio.h> 2 int main() { 3 int k,temp,n[3] = {0}; 4 5 // 输入k个正整数 6 scanf("%d",&k); 7 8 // 循环读入和进行算术 9 while(scanf("%d",&temp)!=EOF) { 10 switch(temp) { 11 case 1: 12 n[0]++; 13 break; 14 case 5: 15 n[1]++; 16 br

计算概论(A)/基础编程练习2(8题)/5:点和正方形的关系

1 #include<stdio.h> 2 #include<math.h> 3 int main() { 4 // 输入坐标 5 float x, y; 6 while(scanf("%f %f", &x, &y) != EOF) { 7 // 计算坐标点与原点的欧氏距离 8 float dist=sqrt(x*x+y*y); 9 10 /* 11 // 简单判断横坐标和纵坐标的截距abs(x).abs(y)和与原点距离dist 注意:abs(

计算概论(A)/基础编程练习2(8题)/1:求平均年龄

1 #include<stdio.h> 2 int main() { 3 // 声明与初始化 4 int n, count=1, s=0, age=0; 5 6 // 输入学生人数 7 scanf("%d", &n); 8 9 // 循环读入 加和 10 while(count<=n) { 11 scanf("%d",&age); 12 s+=age; 13 count++; 14 } 15 16 // 计算平均年龄输出 17 pr

计算概论(A)/基础编程练习(数据成分)/1:短信计费

1 #include<stdio.h> 2 int main() { 3 // 输入当月发送短信的总次数n和每次短信的字数words 4 int n,words; 5 scanf("%d",&n); 6 float price=0.0; 7 8 while(scanf("%d",&words)!=EOF) { 9 // 所发送的短信超过了70个字,则会按照每70个字一条短信的限制把它分割成多条短信发送 10 price+=(words%7

计算概论(A)/基础编程练习1(8题):1:大象喝水

计算概论(A)/基础编程练习1(8题)/1:大象喝水 地址:http://pkuic.openjudge.cn/base1/1/ 1 #include<stdio.h> 2 int main() { 3 /* 圆周率常数 */ 4 const float Pi = 3.14159; 5 6 /* 深h厘米 半径r厘米 均为整数 */ 7 int h, r; 8 scanf("%d %d", &h, &r); 9 10 /* 一桶水的升数 1升 = 1000毫

【分治】计算概论(A) / 函数递归练习(1)多边形游戏

1 #include<cstdio> 2 #include<algorithm> 3 using namespace std; 4 int n,ans,v[41],c[41],s[2]; 5 int work(int L,int R)//分治 6 { 7 if(L==R) return v[L]; 8 int res=0; 9 for(int i=L;i<R;i++) 10 if(c[i]=='+') res=max(res,work(L,i)+work(i+1,R)); 1

认知计算概论

前段时间的"人机大战"--谷歌的Alpha Go战胜人类棋手的新闻甚嚣尘上,不禁有人会想起1997年IBM自主研发的深蓝战胜卡斯帕罗夫的事件."人工智能"这个词再次被推上风口浪尖,而"认知计算"却鲜有人听说,同样是人类模拟机器思索,让机器具有自主思考能力,都是具有跨时代意义和里程碑式的存在. 认知计算更加强调机器或人造大脑如何能够主动学习.推理.感知这个世界,并与人类.环境进行交互的反应.它会根据环境的变化做出动态的反应,所以认知更加强调它的动态

Openjudge-计算概论(A)-求分数序列和

描述: 有一个分数序列 2/1,3/2,5/3,8/5,13/8,21/13,.... 求这个分数序列的前n项之和.输入输入有一行:正整数n.输出输出有一行:分数序列的和(浮点数,精确到小数点后4位). 可以printf("%.4lf\n", a)输出浮点数并精确到小数点后4位. 样例输入 99 样例输出 160.4849 提示最好在程序中使用双精度浮点数(double)记录求得的和.来源计算概论05 思路:首先要找到这段序列的规律:分子=前一个数的分子+分母             

shell脚本,计算学生分数的题目。

1.计算学生平均分数的值是多少? 2.计算每门课都大于80分的学生姓名.3.计算每门课都小于90分的学生姓名.