递归吧 关注:70贴子:81
  • 0回复贴,共1
国际货币投机
Description
每天货币的汇率是不断变化的,例如某天的汇率是:1美元能兑换0.7英镑,1英镑又能兑换9.5法国法郎,而1法国法郎能兑换0.16美国美元,那么投机商人分析发现,经过一连串的兑换后能够有一定的利润可图。例如初始拿着1美元进行一轮兑换后得到1×0.7×9.5×0.16=1.064美元,因而能得到6.4%的利润。
要求:编写程序求解一个能够有利润可图的兑换序列,可以从任何货币作为开始,但是要求兑换过程起点与终点应当是同一种货币,如上例从美元开始兑换,经过一轮兑换后最后换成美元。
Input
输入的是一个矩阵,这个矩阵的维数就是国家的数目,每行代表每个国家的汇率值,每列代表第i列国家与其它国家货币的兑换汇率值,因而矩阵中的对角线元素都是1(自己与自己兑换的原因),故省略掉对角线元素,矩阵的最大维数是20,最小是2。例如:第一列表示第一个国家与其它国家(2<i<N)之间的汇率值,依次类推。
第一行表示输入数据的组数;第二行起依次输入每组数据,每组数据占N+1行(单独一行输入N,再用N行输入兑换矩阵);
Output
判断输入矩阵中是否存在有利可图的兑换序列(利润大于1%才叫做有利可图),如果没有则输出无获利序列;如果有多个序列,则找出兑换序列最短的序列,也就是兑换次数最少的序列,输出该序列,如1 2 1,表示由第1国货币出发经过两次兑换后可获利。
Sample Input
3
3
1.2 .89
.88 5.1
1.1 0.15
4
3.1 0.0023 0.35
0.21 0.00353 8.13
200 180.559 10.339
2.11 0.089 0.06111
2
2.0
0.45
Sample Output
1 2 1
1 2 4 1
no arbitragesequence exists


IP属地:北京1楼2020-11-28 17:05回复