三艘船

明明由于工作的关系,经常需要坐船到某地出差办事。久而久之,明明就对这两地之间船的班次情况相当了解,他会根据办事的具体情况选择不同班次的船出行。这两地的船一共分为三个班次:特快船、快船、慢船,三个班次的船在同一天的0点从港口出发,并沿着同一路线匀速航行,只是它们到达目的地的时刻不同。 你作为明明的好朋友,有一次和明明在闲聊,问到他出差时船的航行距离有多少时,明明没有正面回答你这个问题,而只是把三艘船(特快、快、慢)的速度,以及它们到达目的地的时间是几点钟(并不知道分别是哪一天,只知道三艘船都在100天以内到达了终点)告诉了你,要你推算出两地间的距离长度。你作为一位程序设计专家,自然不会被明明的这个问题所难倒,于是你决定写一个程序,来求解这个看似困难其实简单的问题。 明明的问题可以归结为:给出三艘船的速度,以及它们到达目的地时是几点钟(并不知道分别是哪一天,只知道三艘船都在100天以内到达了终点),求两地间的距离到底有多少。若有多组解,只输出最小的那组解。

#include <iostream>
#include <string>
#include <vector>
#include <cmath>
#include <algorithm>
#include <sstream>
#include <map>

using namespace std;

int main() {
    int a, b, c;
    while (cin >> a >> b >> c) {
        int d, e, f;
        cin >> d >> e >> f;
        int i = 0;
        int j = 0;
        int k = 0;
        bool flag = true;
        int adis = i * 24 * d + a * d;
        int bdis = j * 24 * e + b * e;
        int cdis = k * 24 * f + c * f;
        while (adis != bdis || adis != cdis || bdis != cdis) {
            while (adis < bdis) {
                if (adis == bdis) {
                    break;
                }
                i++;
                adis = i * 24 * d + a * d;
            }
            while(adis > bdis) {
                if (adis == bdis) {
                    break;
                }
                j++;
                bdis = j * 24 * e + b * e;
            }
            while (adis < cdis) {
                if (adis == cdis) {
                    break;
                }
                i++;
                adis = i * 24 * d + a * d;
            }
            while(adis > cdis) {
                if (adis == cdis) {
                    break;
                }
                k++;
                cdis = k * 24 * f + c * f;
            }
            while (bdis < cdis) {
                if (bdis == cdis) {
                    break;
                }
                j++;
                bdis = j * 24 * e + b * e;
            }
            while (bdis > cdis) {
                if (bdis == cdis) {
                    break;
                }
                k++;
                cdis = k * 24 * f + c * f;
            }
        }
        cout << adis << endl;
    }
    return 0;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值