【HDU - 5912】Fraction (模拟)

版权声明:欢迎学习我的博客,希望ACM的发展越来越好~ https://blog.csdn.net/qq_41289920/article/details/82393139

题干:

Mr. Frog recently studied how to add two fractions up, and he came up with an evil idea to trouble you by asking you to calculate the result of the formula below: 
 

As a talent, can you figure out the answer correctly?

Input

The first line contains only one integer T, which indicates the number of test cases. 

For each test case, the first line contains only one integer n (n≤8n≤8). 

The second line contains n integers: a1,a2,⋯an(1≤ai≤10a1,a2,⋯an(1≤ai≤10). 
The third line contains n integers: b1,b2,⋯,bn(1≤bi≤10)b1,b2,⋯,bn(1≤bi≤10).

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.

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

题目大意:

   给你两个长度为n的数组a,b,请你计算出下图中表达式的结果的最简分数形式。 

解题报告:

      直接模拟分子和分母即可,带入一个样例来查看循环的次数,就的出来了需要循环n-2次。最后要求最简分式所以需要除以他俩的gcd就可以了。

AC代码:

#include<bits/stdc++.h>

using namespace std;
int a[10],b[10];
int gcd(int a,int b) {
	while(a^=b^=a^=b%=a);
	return b;
}
int main()
{
	int t,iCase = 0;
	int n;
	cin>>t;
	while(t--) {
		scanf("%d",&n); 
		for(int i = 1; i<=n; i++) {
			scanf("%d",&a[i]);
		}
		for(int i = 1; i<=n; i++) {
			scanf("%d",&b[i]);
		}
		int zi = b[n],mu=a[n],tmp;
		while(n >= 2) {
			zi +=a[n-1] * mu;
			tmp = mu;
			mu = zi;
			zi = tmp * b[n-1];
			n--;
		}
		int g = gcd(zi,mu);
		printf("Case #%d:",++iCase);
		printf(" %d %d\n",zi/g,mu/g);
	}	
	return 0 ;
}

猜你喜欢

转载自blog.csdn.net/qq_41289920/article/details/82393139