题目大意:一次给出序号为1、2、3、4、5这5个国家之间的货币汇率,然后给出周游顺序<c1,c2,c3...cn>,每到一个国家,我们都将原有的外币换成这个国家的钱,那么给出初始金额m的情况下,完成<1,c1,...cn,1>,最终手头的钱会变成多少,结果应四舍五入至百分位。
数理分析:在理解了题意之后,能够看到这是一道很基础的模拟题目。需要注意的细节是,所谓四舍五入至百分位,是要求每次交换都按照这个要求,而不是得到最终的money然后四舍五入,二者在多次交换后会产生可见的误差。第3组数据就是明显的例子。
简单的参考代码如下:
[C] 纯文本查看 复制代码 #include<cstdio> using namespace std;
double rate[6][6];
int country[15];
int main()
{
int t,n;
for(int i = 1;i <= 5;i++)
for(int j = 1;j <= 5;j++)
scanf("%lf",&rate[i][j]);
double money;
while(scanf("%d",&n) && n != 0)
{
country[n+2] = 1;
country[1] = 1;
for(int i = 2;i <= n + 1;i++)
scanf("%d",&country[i]);
scanf("%lf",&money);
for(int i = 1;i <= n + 1;i++)
{
money *= rate[country[i]][country[i+1]];
money = (int)(money*100 + 0.5); //每次交换都应该进行百分位的四舍五入 money /= 100;
}
printf("%.2lf\n",money);
}
} |