2016中国大学生程序设计竞赛(ccpc 长春) Fraction【模拟】
Problem Description
As a talent, can you figure out the answer correctly?
Input
).
Output
For each case, print a line “Case #x: p q”, where x is the case number (starting from 1) and p/q indicates the answer.
You should promise that p/q is irreducible.
You should promise that p/q is irreducible.
Sample Input
1 2 1 1 2 3
Sample Output
Case #1: 1 2
Hint
Here are the details for the first sample:
2/(1+3/1) = 1/2
2/(1+3/1) = 1/2
题意:读入n,输入两行数,第一行是a数组的n个数,第二行是b数组的n个数,按照题目如图所示模拟计算过程,最后结果分数化为最简。
思路:模拟。最后分子分母除以它们最大公约数即最简。
#include<stdio.h> int a[20],b[20]; int gcd(int a,int b) { int m; if( a < b) m = a,a=b,b=m; while(a%b) { m = a%b; a = b; b = m; } return b; } int main() { int T,t,t2=0,i,n,j; int x,y; scanf("%d",&T); while(T --) { scanf("%d",&n); for(i = 1; i <= n; i ++) scanf("%d",&a[i]); for(i = 1; i <= n; i ++) scanf("%d",&b[i]); x = a[n-1]*a[n] + b[n];//初始化分子 y = a[n];//初始化分母 t = x; i = n-1; j = n-2; while(i>0||j>0)//循环模拟计算过程 { x = y*b[i--] + a[j--]*t; y = t; t = x; } t = gcd(x,y);//求两数最大公约数 printf("Case #%d: %d %d ",++t2,x/t,y/t); } return 0; }