这道题讲的是汇率。叫你找出某中货币通过汇率换成其他

货币后最后再换成原来货币。是否能比原来的多。

思路:先将其他货币进行排号,然后利用flody算法,找到

那几种货币是否能通过汇率兑换后比原来的多。

代码:

View Code
 1 #include<iostream>
 2 #include<string>
 3 using namespace std;
 4 double g[32][32];
 5 char na[32][100];
 6 int n,m;
 7 
 8 int find(char s[])//找到该货币名 对应的排号 
 9 {
10     int i;
11     for(i=1;i<=n;i++)
12     {
13         if(0==strcmp(na[i],s))
14         {
15             return i;
16         }
17     }
18 }
19 int floyd()
20 {
21     int i,j,k;
22     double tem;
23     for(k=1;k<=n;k++)//找出i到j的最大值 
24         for(i=1;i<=n;i++)
25             for(j=1;j<=n;j++)
26             {
27                 tem=g[i][k]*g[k][j];
28                 if(tem>g[i][j])
29                     g[i][j]=tem;
30             }
31     for(i=1;i<=n;i++)
32     {
33         if(g[i][i]>1)//判断最终是否有大于原来的那种货币 
34         {
35             return 1;
36         }
37     }
38     return 0;
39 }
40 int main()
41 {
42     int i,j,k=1;
43     double x;
44     char s1[100],s2[100];
45     while(cin>>n&&n)
46     {
47         for(i=1;i<=n;i++)
48             cin>>na[i];
49         cin>>m;
50         memset(g,0,sizeof(g)); 
51         for(j=0;j<m;j++)
52         {
53             cin>>s1>>x>>s2;
54             g[find(s1)][find(s2)]=x;
55         }
56         if(floyd())
57             cout<<"Case "<<k++<<": Yes"<<endl;
58         else
59             cout<<"Case "<<k++<<": No"<<endl;
60         
61     }
62 }

 

posted on 2012-09-14 19:54  xinmenghuairi  阅读(182)  评论(0编辑  收藏  举报