zju1058題解

題目:

Currency Exchange


Time Limit: 1 Second      Memory Limit: 32768 KB
When Issac Bernand Miller takes a trip to another country, say to France, he exchanges his US dollars for French francs. The exchange rate is a real number such that when multiplied by the number of dollars gives the number of francs. For example, if the exchange rate for US dollars to French francs is 4.81724, then 10 dollars is exchanged for 48.1724 francs. Of course, you can only get hundredth of a franc, so the actual amount you get is rounded to the nearest hundredth. (We'll round .005 up to .01.) All exchanges of money between any two countries are rounded to the nearest hundredth.

Sometimes Issac's trips take him to many countries and he exchanges money from one foreign country for that of another. When he finally arrives back home, he exchanges his money back for US dollars. This has got Issac thinking about how much if his unspent US dollars is lost (or gained!) to these exchange rartes. You'll compute how much money Issac ends up with if he exchanges it many times. You'll always start with US dollars and you'll always end with US dollars.

Input

The first 5 lines of input will be the exchange rates between 5 countries, numbered 1 through 5. Line i will five the exchange rate from country i to each of the 5 countries. Thus the jth entry of line i will give the exchange rate from the currency of country i to the currency of country j. the exchange rate form country i to itself will always be 1 and country 1 will be the US. Each of the next lines will indicate a trip and be of the form

N c1 c2 �� cn m

Where 1 <= n <= 10 and c1, ��, cn are integers from 2 through 5 indicating the order in which Issac visits the countries. (A value of n = 0 indicates end of input, in which case there will be no more numbers on the line.) So, his trip will be 1 -> c1 -> c2 -> �� -> cn -> 1. the real number m will be the amount of US dollars at the start of the trip.

Output

Each trip will generate one line of output giving the amount of US dollars upon his return home from the trip. The amount should be fiven to the nearest cent, and should be displayed in the usual form with cents given to the right of the decimal point, as shown in the sample output. If the amount is less than one dollar, the output should have a zero in the dollars place.

This problem contains multiple test cases!

The first line of a multiple input is an integer N, then a blank line followed by N input blocks. Each input block is in the format indicated in the problem description. There is a blank line between input blocks.

The output format consists of N output blocks. There is a blank line between output blocks.


Sample Input

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

Sample Output

19.98
99.99
120.01


Source: East Central North America 2001, Practice

題目大意:輸入前五行是五個國家的匯率,從1-5編號,第i行的五個匯率,是第i個國家依次與五個國家之間的匯率,這樣第i行第j個數據就是第i個國家到第j個國家的貨幣匯率,第i個國家到它自身的匯率總是1,第一個國家是美國,其後,每一行表示一次旅行,輸入國家的旅行順序,然後再輸入初始錢數,輸入0時,表示結束,輸出,每個旅行產生一個輸出,給出他旅途返回時所擁有的美元數,若數量小於1美元,在美元的位置應輸出0。每組數據之間有一個空行。

算法分析:可以用一個2爲數組來存放五個國家之間的匯率,用一個一維數組來存放旅程當中的國家的序號,然後就是做連乘就可以了,最後輸出乘積即爲剩餘的錢數。

代碼:

語言:c

#include<stdio.h>

int main()

{

int i,j,k,m,country[15],n;

double change[5][5],money;

country[0]=1;

scanf("%d",&n);

for(k=1;k<=n;++k)

{

printf("/n");

for(i=0;i<5;++i)

for(j=0;j<5;++j)

scanf("%lf",&change[i][j]);

scanf("%d",&m);

while(m!=0)

{

for(i=1;i<=m;++i)

scanf("%d",&country[i]);

country[m+1]=1;

scanf("%lf",&money);

for(i=0;i<=m;++i)

{

money=money*change[country[i]-1][country[i+1]-1];

money=(int)(money*100+0.5);

money/=100;

}

printf("%.2lf/n",money);

scanf("%d",&m);

}

if(k!=n)

        printf("/n");

}

system("pause");

return 0;

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章