题目大意:有t个样例,每个样例输入n,输入a1,a2,a3...an。输入b1,b2,b3....bn。输出按公式的计算结果。
解题思路:用递归,初始化a0 = 0,从最下层保存分子分母,每次计算分子分母,最后进行化简。
ac代码:
#include <iostream>
using namespace std;
int t, n, a[16], b[16], temp1, temp2, temp3, cnt=1;
void dfs(int cur)
{
if (cur == n)
temp1 = a[n], temp2 = b[n] + a[n] * a[n-1];
else{
dfs(cur+1);
temp3 = b[cur] * temp1;
temp1 = temp2;
temp2 = temp3 + temp1 * a[cur-1];
}
}
int main()
{
scanf("%d", &t);
while (t--){
scanf("%d", &n);
a[0] = 0;
for (int i=1; i<=n; i++)
scanf("%d", &a[i]);
for (int i=1; i<=n; i++)
scanf("%d", &b[i]);
dfs(1);
for (int i=temp1; i>=2; i--)
if (temp1 % i == 0 && temp2 % i == 0)
temp1 /= i, temp2 /= i;
printf("Case #%d: %d %d\n", cnt++, temp2, temp1);
}
return 0;
}