套汇问题

#include <iostream>
#include <fstream>
#include <string>
using namespace std;

const int MAX = 10;
string name[MAX];
double r[MAX][MAX];  //r[i][j]表示货币i与货币j的兑换率

double max(double a, double b)
{
    return a>b ? a:b;
}

//通过计算兑换率矩阵的传递闭包进行判断
//n为货币种数, m为兑换率种数
//如果存在套汇,返回"yes",否则返回"no"
string greedy(int n)
{
    int i, j, k;
    for(i=0; i<n; i++)
        r[i][i] = 1.0;

    for(k=0; k<n; k++)
        for(i=0; i<n; i++)
            for(j=0; j<n; j++)
                r[i][j] = max(r[i][j], r[i][k]*r[k][j]);
    for(i=0; i<n; i++)
        if(r[i][i] > 1.0)
            return "yes";
    return "no";
}

int main()
{
    ifstream fin("套汇.txt");
    int n, m;
    int count = 0;
    while(!fin.eof())
    {
        count++;
        cout << "输入货币总数:";
        fin >> n; cout << n;
        cout << "\n输入货币名称:\n";
        int i;
        for(i=0; i<n; i++)
        {
            fin >> name[i];  cout << name[i] << endl;
        }
        cout << "输入不同货币兑换率种数:";
        fin >> m; cout << m;
        cout << "\n货币ci,兑换率rij,货币cj:\n";
        string c1, c2;
        double r12;
        for(i=0; i<m; i++)
        {
            fin >> c1;  cout << c1 << " ";
            fin >> r12; cout << r12 << " ";
            fin >> c2;  cout << c2 << endl;
            for(int j=0; j<n && c1.compare(name[j])!=0; j++);
            for(int k=0; k<n && c2.compare(name[k])!=0; k++);
            r[j][k] = r12;
        }

        cout << "case " << count << " " << greedy(n) << endl;
    }
    fin.close();
    return 0;
}

这里写图片描述

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值