这道题讲的是汇率。叫你找出某中货币通过汇率换成其他
货币后最后再换成原来货币。是否能比原来的多。
思路:先将其他货币进行排号,然后利用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 }