三艘船
问题描述
明明由于工作的关系,经常需要坐船到某地出差办事。久而久之,明明就对这两地之间船的班次情况相当了解,他会根据办事的具体情况选择不同班次的船出行。这两地的船一共分为三个班次:特快船、快船、慢船,三个班次的船在同一天的0点从港口出发,并沿着同一路线匀速航行,只是它们到达目的地的时刻不同。 你作为明明的好朋友,有一次和明明在闲聊,问到他出差时船的航行距离有多少时,明明没有正面回答你这个问题,而只是把三艘船(特快、快、慢)的速度,以及它们到达目的地的时间是几点钟(并不知道分别是哪一天,只知道三艘船都在100天以内到达了终点)告诉了你,要你推算出两地间的距离长度。你作为一位程序设计专家,自然不会被明明的这个问题所难倒,于是你决定写一个程序,来求解这个看似困难其实简单的问题。 明明的问题可以归结为:给出三艘船的速度,以及它们到达目的地时是几点钟(并不知道分别是哪一天,只知道三艘船都在100天以内到达了终点),求两地间的距离到底有多少。若有多组解,只输出最小的那组解。
输入说明
你写的程序要求从标准输入设备中读入测试数据作为你所写程序的输入数据。标准输入设备中有多组测试数据,每组测试数据占二行,第一行有3个正整数a、b、c,代表3艘船的到达港口那天的时间是几点钟(0≤a、b、c≤23)。第二行有3个正整数d、e、f代表3艘船的速度(0<d、e、f<30000),速度的单位是单位距离每小时。每组测试数据与其后一组测试数据之间没有任何空行,第一组测试数据前面以及最后一组测试数据后面也都没有任何空行。
输出说明
对于每一组测试数据,你写的程序要求计算出一组相应的运算结果,并将这一组运算结果作为你所写程序的输出数据依次写入到标准输出设备中。每组运算结果由一个整数构成,代表路程的长度,若有多组解,只输出最小的那组解。每组运算结果与其后一组运算结果之间没有任何空行,第一组运算结果前面以及最后一组运算结果后面也都没有任何空行。
输入范例
4 2 20
5 10 13
18 12 21
6 9 12
输出范例
260
540
示例代码
#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;
}