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)  
    */
  • 相关阅读:
    深入理解 ProtoBuf 原理与工程实践(概述)
    高性能缓存 Caffeine 原理及实战
    Java 多线程上下文传递在复杂场景下的实践
    SpringBoot 2.0 中 HikariCP 数据库连接池原理解析
    MySQL 5.6.35 索引优化导致的死锁案例解析
    gitlab安装升级(大版本跨度9.4.5----13.2.1)
    mysql 查看表的索引
    python安装mysql库 ,MySQL-python
    Alpine包管理工具apk使用介绍
    docker容器添加hosts
  • 原文地址:https://www.cnblogs.com/naive/p/3568774.html
Copyright © 2011-2022 走看看