引き続き、AtCoderの過去問をC++で解いていきます。ABC 135A – Harmonyから。
ABC 135A – Harmony
問題
相違なる整数A,Bがあります。
|A−K|=|B−K|となるような整数Kを出力してください。
そのような整数が存在しなければ、代わりにIMPOSSIBLE
を出力してください。
自分の回答
#include <bits/stdc++.h>
using namespace std;
int main() {
int A, B;
cin >> A >> B;
int K = (A + B) / 2;
if((A + B) % 2 == 0){
cout << K << endl;
}else {
cout << "IMPOSSIBLE" << endl;
}
}
|A−K|=|B−K|を式展開すると、K=(A+B)/2となります。また、(A+B)%2==0として、Kが整数かどうかを確かめています。
ABC 136A – Transfer
問題
水を入れる容器が2つあります。
容器1には水をAミリリットルまで入れることができ、水がBミリリットル入っています。
容器2には水がCミリリットル入っています。
容器2から容器1に入るだけ水を移します。
容器2の中には何ミリリットルの水が残るでしょうか。
自分の回答
#include <bits/stdc++.h>
using namespace std;
int main() {
int A, B, C;
cin >> A >> B >> C;
int ans = C - (A - B);
if(ans < 0){
cout << 0 << endl;
}else {
cout << ans<< endl;
}
}
答えはC – (A – B)で求まります。ただし、答えが負の値になった時は0を出力するようにします。
ABC 137A – +-x
問題
整数A,Bがあります。
A+B, A−B, A×B の中で最大の数を出力してください。
自分の回答
#include <bits/stdc++.h>
using namespace std;
int main() {
int A, B;
cin >> A >> B;
vector<int> n{A + B, A - B, A * B};
cout << *max_element(n.begin(), n.end()) << endl;
}
max_element関数を使います。ちなみに、max関数は二つの値を比べる時にしか使えません。最初、max関数を使っていて、エラーになりました。
ABC 138A – Red or Not
問題
整数aと、英小文字からなる文字列sが入力されます。
aが3200以上ならsと出力し、aが 3200未満ならred
と出力するプログラムを書いてください。
自分の回答
#include <bits/stdc++.h>
using namespace std;
int main() {
int a;
cin >> a;
string s;
cin >> s;
if(a >= 3200){
cout << s << endl;
}else {
cout << "red" << endl;
}
}
特に難しいところはないですね。aはint型、sはstring型なのに注意しましょう。
ABC 139A – Tenki
問題
ある3日間の天気予報が、長さ3の文字列Sとして与えられます。
Sの i (1≤i≤3)文字目がS
のとき、i日目の天気予報が晴れだったことを、C
のときは曇りだったことを、R
のときは雨だったことを意味します。
また3日間の実際の天気が、長さ3の文字列Tとして与えられます。
Tの i (1≤i≤3)文字目がS
のとき、i日目の天気予報が晴れだったことを、C
のときは曇りだったことを、R
のときは雨だったことを意味します。
3日間で天気予報が的中した日が何日あるかを出力してください。
自分の回答
#include <bits/stdc++.h>
using namespace std;
int main() {
string S, T;
cin >> S >> T;
int count = 0;
for (int i = 0; i < 3; i++) {
if (S[i] == T[i]){
count += 1;
}
}
cout << count << endl;
}
A問題を解いていて、初めて繰り返しの関数を使いました。値が一致した時にcountに1を足していきます。
for
for (初期値設定式; ループ条件式; ループ更新式){
(処理内容)
}
という形で使います。
ABC 140A – Red or Not
問題
高橋君は3桁のパスワードを設定しようとしています。
使える文字が1以上N以下の数字のみであるとき、設定できるパスワードが全部で何種類であるかを答えてください。
自分の回答
#include <bits/stdc++.h>
using namespace std;
int main() {
int N;
cin >> N;
cout << pow(N, 3) << endl;
}
与えられた数を3乗した値が答えとなります。pow関数を使いましょう。