钱币兑换 C语言

题目

一个人到国外旅游时,他就需要把本国的钱币兑换成目标国的币种,兑换的方法是用本国钱币数乘以目标国的汇率即可。比如中国小艾要去美国旅游,他会把持有的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、每组测试数据的输出,用空行分隔

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值