题目
一个人到国外旅游时,他就需要把本国的钱币兑换成目标国的币种,兑换的方法是用本国钱币数乘以目标国的汇率即可。比如中国小艾要去美国旅游,他会把持有的10元人民币乘以对美元的汇率(如0.1542)得到1.542美元,当然实际得到的美元数要四舍五入到百分位,即1.54美元。 现在假定小艾要到多个国家旅游,他就要把本国的货币兑换成第一个目标国的货币,在去往第二个目标国时,再把剩余的货币兑换成第二个目标国的货币,依此类推,等他返回本国前,再把最终剩余的货币兑换成本国的货币。 现在请你计算一下小艾在多个国家旅游后,返回本国时所拥有的货币数。
输入格式
有多组测试数据。 第一行的整数N表示有N组测试数据。 接下来,对于每一组测试数据,前面是5*5的矩阵,表示5个国家之间的汇率表。 后面的每一行包括n+1个整数和一个实数m,最前面的整数n表示小艾要旅游的目标国数,后面是n个数,表示小艾要途经的国家编号,最后的实数m表示小艾出发时持有的本国货币数。 如果n=0,表示本组测试数据结束。小艾在n个国的旅游的结束后,会返回本国。
输出格式
对于每次出行,在一行上输出小艾最终拥有的本国货币数,保留两位小数。 每组测试数据的输出,用空行分隔。
输入样例
1
1 1.57556 1.10521 0.691426 7.25005
0.634602 1 0.701196 0.43856 4.59847
0.904750 1.42647 1 0.625627 6.55957
1.44616 2.28059 1.59840 1 10.4843
0.137931 0.217555 0.152449 0.0953772 1
3 2 4 5 20.00
1 3 100.00
6 2 3 4 2 4 3 120.03
0
输出样例
19.98
99.99
120.01
注:小艾的行程是从本国出发,依次途经各目标国,最终返回本国。
题目出处及要求:
关键算法
四舍五入
对浮点类型a进行四舍五入到两位小数操作:
double wei=100.0;
a=(int)(a*wei+0.5)/wei;
同理,四舍五入到几位,wei就等于几百。
参考代码
#include<stdio.h>
int main(){
int N,n,coy[100];
double rate[5][5],money;
while(scanf("%d",&N)!=EOF){
while(N--){
for(int i=0;i<5;i++){
for(int j=0;j<5;j++){
scanf("%lf",&rate[i][j]);
}
}
while(1){
scanf("%d",&n);
if(n==0) break;
for(int j=0;j<n;j++){
scanf("%d",&coy[j]);
}
scanf("%lf",&money);
//四舍五入计算钱数
int t=0;
for(int j=0;j<n;j++){
money*=rate[t][coy[j]-1];
money=(int)(money*100+0.5)/100.0;
t=coy[j]-1;
}
money*=rate[t][0];
money=(int)(money*100+0.5)/100.0;
printf("%.2lf\n",money);
}
if(N>=1){
printf("\n");
}
}
}
return 0;
}
/*
2
1 1.57556 1.10521 0.691426 7.25005
0.634602 1 0.701196 0.43856 4.59847
0.904750 1.42647 1 0.625627 6.55957
1.44616 2.28059 1.59840 1 10.4843
0.137931 0.217555 0.152449 0.0953772 1
3 2 4 5 20.00
1 3 100.00
6 2 3 4 2 4 3 120.03
0
1 1.57556 1.10521 0.691426 7.25005
0.634602 1 0.701196 0.43856 4.59847
0.904750 1.42647 1 0.625627 6.55957
1.44616 2.28059 1.59840 1 10.4843
0.137931 0.217555 0.152449 0.0953772 1
3 2 4 5 20.00
1 3 100.00
6 2 3 4 2 4 3 120.03
0
*/
易错点
1、整题多组输入
2、每次计算都要四舍五入
3、每组测试数据的输出,用空行分隔