A - Three-Point Shot Editorial by dokin
プログラミング初心者を対象にA問題の解き方を解説します。ご意見などがあれば、dokinのtwitterまでご連絡ください。
注意
C++の利用を想定した解説です。 Pythonなど他言語を利用される方は、別の解説をご覧ください。
必要な知識
プログラミング言語C++の勉強には、AtCoder公式の学習教材 APG4b がおすすめです。
今回の問題では、以下の項目が参考になります。
- 基礎知識(標準入出力、変数など)
A - 1.00.はじめに から F - 1.05.実行順序と入力 まで - if文、else句の使い方
G - 1.06.if文・比較演算子・論理演算子
また、APG4bには記載がありませんが、STLの関数 absを知っていると簡単に問題を解くことができます。
- abs(a) : aの絶対値(absolute value)を返す。(例: abs(3) = 3, abs(-2) = 2, abs(0) = 0)
これらの知識について、正確に覚える必要はありません。 忘れてしまったときには自力で解決しようとせず、APG4bなどで調べなおす習慣をつけましょう。
考え方
問題文に書かれている条件を整理し、数式の形にします。
「得点状況 \(X\) 対 \(Y\) から劣勢のチームが3 点入れると逆転が起こる」
\(\iff\)「\(X\) と \(Y\) の 差が3未満」
\(\iff\)「\(\mathrm{abs}(X-Y)<3\)」
したがって、
- \(\mathrm{abs}(X-Y)<3\) ならば、Yes を出力する
- そうでないならば、Noを出力する
コードを書きたいです。
実装
次のような順番で実装します。
- int型の変数 X,Y を宣言する。
- 入力からX,Yの値を受け取る。
- abs( X - Y) < 3 ならば、Yesを出力する。
- そうでないならば、Noを出力する。
#include<bits/stdc++.h>
using namespace std;
int main() {
// int型の変数 X,Y を宣言する。
int X, Y;
//入力からX,Yの値を受け取る。
cin >> X >> Y;
//abs(X-Y)<3であれば、Yesを出力する。
if (abs(X - Y) < 3) {
cout << "Yes" << endl;
}
//そうでないならば、Noを出力する。
else {
cout << "No" << endl;
}
}
1-2行目
現時点では、この部分を「おまじない」だと思っていただいて問題ありません。
main関数の内側(5-19行目 )にコードを書いていきます。
5-6行目
(変数の型) (変数名1), (変数名2), … ;
により、変数を宣言できます。
変数の型とは、変数に書き込めるデータの種類のことです。
今回は整数を扱うので、int型の変数を宣言します。
変数名には、アルファベットであれば原則好きな名前をつけることができます。今回は問題文に合わせ、X,Yと名前をつけます。
8-9行目
cin >> (変数1) >> (変数2) >> … ; により、入力を受け取ります。今回は、X,Yの値を入力から順番に受け取ります。
11-14行目
条件式「abs(X - Y) < 3 」を満たすとき Yes を出力したいです。
if (条件式) { 処理 }
により、条件式をみたすかどうかを判定し、満たした場合に処理を実行することができます。
また、cout << “文字列” ; と書くことで、文字列を出力することができます。
今回のコードでは、最後に endl を出力することで改行しています。
16-19行目
if文のあとにelse句を付け加えることで、条件式を満たさなかった場合の処理を書くことができます。
今回のコードでは、条件式「abs(X - Y) < 3 」を満たしていないとき、No を出力します。
不正解の時は…
- 出力の間違い
- “Yes”, “No”と出力すべきところを、”YES”, ”NO”と出力している。
- “Yes”, “No”と出力すべきところを、”YES”, ”NO”と出力している。
- 条件式の間違い
- X - Y > -3 || X - Y < 3
- abs(X - Y) <= 3
など、間違えた条件式を書くとWAになります。
- X - Y > -3 || X - Y < 3
- 複雑なコードを書いた結果、どこかにバグを埋め込んでいる。
- 今回の問題では、問題文に書かれている通りに実装するとコードが複雑になってしまいます (提出例)。 紙の上で条件を整理し、シンプルなコードを書くように心がけると、バグを減らすことができます。
類題
if文による判定問題
abs関数を用いる問題
工事中
posted:
last update: