ABCの過去問 107A – Train、ABC 108A – PairをC++で解いていきます。
ABC 107A – Train
問題
N両編成の列車があります。 この列車の前からi両目は、後ろから何両目でしょうか?
自分の回答
#include <bits/stdc++.h>
using namespace std;
int main() {
int n, i;
cin >> n >> i;
cout << n - i + 1 << endl;
}
n-iに1を足したものが答えとなります。
ABC 108A – Pair
問題
1以上K以下の正の整数から、偶数と奇数ひとつずつの組を選ぶ方法の個数を求めてください。なお、選ぶ順番は考慮しません。
自分の回答
#include <bits/stdc++.h>
using namespace std;
int main() {
int k;
cin >> k;
// 与えられた値の偶数の数の個数を求める
int even = k / 2;
// 偶数か奇数かで場合わけ
if (k % 2 == 0){
cout << even * even << endl;
}else {
cout << even * (even + 1) << endl;
}
}
まずは、与えられた値kの偶数の個数を求めます。変数evenがそれに値します。
次にkが偶数か奇数で場合わけをします。偶数の場合はevenを二乗して、奇数の場合は、even+1をしてevenにかけます。なぜなら、kが奇数の場合、偶数の個数より、奇数の個数が一個多くなるからです。
例
k=6の場合
偶数の数の個数は
even = k / 2 = 3 (2,4,6)
となり、奇数は(1,3,5)となるので、3*3で答えは9となります。
k=9の場合
偶数の数の個数は
even = k / 2 = 4 (2,4,6,8)
となり、奇数は(1,3,5,7,9)となるので、4*5で答えは20となります。
ABC 109A – ABC333
問題
1以上3以下の整数 A,Bが与えられます。
A×B×Cが奇数となるような1以上3以下の整数Cが存在するか判定してください。
自分の回答
#include <bits/stdc++.h>
using namespace std;
int main() {
int a, b;
cin >> a >> b;
if ((a % 2 != 0) && (b % 2 != 0)) {
cout << "Yes" << endl;
}else {
cout << "No" << endl;
}
}
A×B×Cが奇数になる条件としては、A,B,Cが全て、奇数である必要があります。Cは1以上3以下の整数なので、1でも3どちらでもよくて、与えられた値A,Bが奇数かどうかを確かめればいいですね。
A,Bがどちらも奇数の場合は、”Yes”をどちらかもしくはどちらも偶数の場合”No”となります。