[AtCoder]ABC 135A – Harmony ~ 140[C++]

プログラミング

引き続き、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関数を使いましょう。

タイトルとURLをコピーしました