A - Don't be late Editorial by chokudai
高橋君が \(T\) 分後に到着出来るかどうかを求めるには、高橋くんが何分で到着出来るかを求めてしまえば、あとは比較をするだけで解くことが出来ます。
高橋君が到着するまでの時間は整数にはなりません。多くのプログラミング言語では、整数同士で割り算を行うと、小数部分が切り捨てられ、整数となります。今回の問題では、答えが切り捨てられててしまうと、例えば、D = 11, T = 5, S = 2などの場合において、正しい答えを得ることが出来ません。
ここで、double型などを使って小数として計算すると、今回の問題では誤差が出ないため、正しく解くことが出来ます。 (誤差についての説明は、回答例の下で行います)
#include <iostream>
using namespace std;
int main() {
//入力を受け取る
int D, T, S;
cin >> D >> T >> S;
//高橋君の移動時間を計算する
double time = (double)D / S;
//Tとtimeの大小関係に応じて出力をする
if (T >= time) {
cout << "Yes" << endl;
}
else {
cout << "No" << endl;
}
}
今回の問題で要求はされませんが、最終的に答えが整数になる場合でも、演算の途中で小数になってしまう場合には、答えが微妙にズレてしまう場合があります。
例えば、1÷3×3を計算しようとした時に、1÷3の時点で0.3333となり、それを3倍しても0.9999のようにしかならない、というイメージです。 (厳密な説明を知りたい場合は、「浮動小数点数」や「浮動小数点演算」で検索してみてください)
これを避けるために、普段から小数を使わない問題の解き方を覚えておくと、今後の問題が解きやすくなるかも知れません。
今回の問題では、高橋君が何分で到着出来るかではなく、高橋くんが\(T\)分で何メートル移動出来るかを求めてあげることで、割り算ではなく掛け算の演算となり、整数演算のみで問題を解くことが出来ます。移動できる距離がDメートル以上であれば、高橋君は待ち合わせに間に合うことが出来ます。
#include <iostream>
using namespace std;
int main() {
//入力を受け取る
int D, T, S;
cin >> D >> T >> S;
//高橋君の移動時間を計算する
int dist = S * T;
//Dとdistの大小関係に応じて出力をする
if (dist >= D) {
cout << "Yes" << endl;
}
else {
cout << "No" << endl;
}
}
posted:
last update: