zoukankan      html  css  js  c++  java
  • ZOJ 1092 Arbitrage

    原题链接

    题目大意:Arbitrage这个单词的解释是“套利交易”,就是利用几个币种之间的汇率差价来赚钱。比如人民币兑美元6:1,美元兑欧元1.5:1,欧元兑人民币10:1,那么用9元人民币可以换1.5美元,1.5美元换1欧元,1欧元换10元人民币。这样一倒手,就赚了1元。这是闷声发大财的典型例子!

    解法:在做这道题的时候,又学会了一种新的算法(Floyd算法)。具体过程是开辟一个方阵,每行每列都对应一种货币,每个元素就是横纵两种货币的汇率。然后是一个三层循环,最外层的循环是表示过度节点的,这一层必须放在最外面,里面两层是行和列的扫描。如果经过某一个过渡点汇率增加了,就更新这个节点。这里还要注意一个地方,字符串的比较,直接“==”就完蛋了,要用strcmp(str1,str2)==0来比较。

    参考代码:

    #include<iostream>
    #include<string>
    using namespace std;
    
    int main(){
    	int i,j,k,m,n,cases=0;
    	string str1,str2;
    	double t;
    
    	while(cin>>n&&n!=0){
    		cases++;
    		string currency[30];
    		double table[30][30]={0.0};	//must use a constant value to initiate an array
    		for(i=0;i<n;i++){
    			cin>>currency[i];
    			table[i][i]=1;
    		}
    		cin>>m;
    		for(i=0;i<m;i++){
    			cin>>str1>>t>>str2;
    			j=0;
    			while(j<n){
    				if(str1.compare(currency[j])==0)
    				break;
    				j++;
    			}
    			k=0;
    			while(k<n){
    				if(str2.compare(currency[k])==0)
    					break;
    				k++;
    			}
    			table[j][k]=t;
    		}
    		for(k=0;k<n;k++){
    			for(i=0;i<n;i++){
    				for(j=0;j<n;j++){
    					if(table[i][k]*table[k][j]>table[i][j])
    						table[i][j]=table[i][k]*table[k][j];
    				}
    			}
    		}
    		bool flag=0;
    		for(i=0;i<n;i++){
    			if(table[i][i]>1){
    				cout<<"Case "<<cases<<": Yes"<<endl;
    				flag=1;
    				break;
    			}
    		}
    		if(flag==0)
    			cout<<"Case "<<cases<<": No"<<endl;
    			
    	}
    
    
    	return 0;
    }
    
    
    /*
    blog.csdn.net/zxy_snow/article/details/5810890
    
    For k←1 to n do // k为“媒介节点”  
       For i←1 to n do  
          For j←1 to n do  
             if (dist(i,k) + dist(k,j) < dist(i,j)) then // 是否是更短的路径?  
                dist(i,j) = dist(i,k) + dist(k,j)  
    */
  • 相关阅读:
    sql常用函数
    sql数据库查询
    数据库增删改查
    数据库基本概念
    C#总结
    C#结构体
    C#常用函数类
    初识函数
    C#冒泡排序 折半查找
    12月27日笔记
  • 原文地址:https://www.cnblogs.com/naive/p/3568774.html
Copyright © 2011-2022 走看看