A - Two Coins
#include <bits/stdc++.h>
using namespace std;
int main() {
// 入力部(a,b,c)
int a, b, c;
cin >> a >> b >>c;
// 所持金は a と b の合計
// この所持金が 価格c 以上なら "Yes", 違うなら "No"
if(a + b >= c) {
cout << "Yes" << endl;
} else {
cout << "No" << endl;
}
}
A - ι⊥l
#include <bits/stdc++.h>
using namespace std;
int main() {
// 入力部(a,b,c)
int a, b, c;
cin >> a >> b >>c;
// 問題中の比較をそのまま利用してOK
if(b - a == c - b) {
cout << "YES" << endl;
} else {
cout << "NO" << endl;
}
}
A - Three-letter acronym
#include <bits/stdc++.h>
using namespace std;
int main() {
// 入力部(s1,s2,s3)
string s1, s2, s3;
cin >> s1 >> s2 >> s3;
// 取得した文字列の1文字目を取得してそれを大文字に変換する。
// ○○.at(0) で1文字目を char型(一文字のみ) で取得。
// これから32を引くことで、それぞれの小文字アルファベットに対する大文字のASCIIコードを取得。
// ここで取得したASCIIコードを数字ではなく、文字として出力するために char型 にキャスト変換する。
// ちなみに char型 と int型 の演算は char型 が int型 に変換されてから計算される。
cout << (char)(s1.at(0)-32) << (char)(s2.at(0)-32) << (char)(s3.at(0)-32) << endl;
}
A - Rotation
回答例1 (reverse関数を利用する)
#include <bits/stdc++.h>
using namespace std;
int main() {
// 入力される(c11,c12,c13)をs1, (c21,c22,c23)をs2として入力
string s1, s2;
cin >> s1 >> s2;
// s2をreverse関数を用いて反転させる
reverse(s2.begin(), s2.end());
//「s1」と「反転させたs2」が同じなら 'YES' と表示
if(s1 == s2) {
cout << "YES" << endl;
} else {
cout << "NO" << endl;
}
}
回答例2 (reverse関数を使用しないパターン)
#include <bits/stdc++.h>
using namespace std;
int main() {
// 入力される(c11,c12,c13)をs1, (c21,c22,c23)をs2として入力
string s1, s2;
cin >> s1 >> s2;
// s1の1文字目(c11) と s2の3文字目(c23) が同じ
// かつ
// s1の2文字目(c12) と s2の2文字目(c22) が同じ
// かつ
// s1の3文字目(c13) と s2の1文字目(c21) が同じ
//
// この条件を満たす時、180°回転させた時に、元のマス目と一致する。
if(s1.at(0) == s2.at(2) && s1.at(1) == s2.at(1) && s1.at(2) == s2.at(0)) {
cout << "YES" << endl;
} else {
cout << "NO" << endl;
}
}
B - 81
#include <bits/stdc++.h>
using namespace std;
int main() {
// 入力部(N)
int N;
cin >> N;
// 条件を満たすパターンの数をカウントする変数
int cnt = 0;
// 1~9までのループを行う。
for(int i = 1; i < 10; i++) {
// iでちょうど割り切れて、Nをiで割った結果が9以下の時、
// この i と N/iの演算結果 に積は N になり、
// Nをiで割った結果が9以下なので問題文の条件を満たす。
if(N % i == 0 && N / i < 10) {
//cnt(条件を満たすパターンの数をカウントする変数) に1を加算。
cnt++;
}
}
// cntが0でないなら 'Yes' となる。
// つまり、1度でもfor文内のif文の条件を満たしているなら 'Yes' と表示。
if(cnt) {
cout << "Yes" << endl;
} else {
cout << "No" << endl;
}
}
B - Christmas Eve Eve
回答例1 (sort関数を利用しないパターン)
#include <bits/stdc++.h>
using namespace std;
int main() {
// 入力部(N)
int N;
cin >> N;
// 入力部(p1, p2, ... pN)
vector<int> p(N);
for(int i = 0; i < N; i++) {
cin >> p.at(i);
}
// sum は 購入する品物の合計金額。
// highest は 購入する品物の中で最高価格の景品の価格。
int sum = 0, highest = 0;
for(int i = 0; i < N; i++) {
// sum に 価格の値段を加算。
sum += p.at(i);
// highest(現状の探索範囲での最高価格) と 今の景品の価格 を比較し、高い方を highest に格納。
highest = max(p.at(i), highest);
}
// sum(景品の合計金額) からhighest(最高価格の景品の価格)の半額の値 を引く。
cout << sum - highest/2 << endl;
}
回答例2 (sort関数を利用したパターン)
#include <bits/stdc++.h>
using namespace std;
int main() {
// 入力部(N)
int N;
cin >> N;
// 入力部(p1, p2, ... pN)
vector<int> p(N);
for(int i = 0; i < N; i++) {
cin >> p.at(i);
}
// 配列pをソート。
sort(p.begin(), p.end());
// 配列pの最後尾(最も定価が高い品物の価格)の半額 を最初から引いておく。
// 意味的には商品の合計を求める前に割引をしているもの。
int sum = -p.at(N-1) / 2;
// 全ての品物の価格を sum に加算。
for(int i = 0; i < N; i++) {
sum += p.at(i);
}
cout << sum << endl;
}
B - 105
#include <bits/stdc++.h>
using namespace std;
int main() {
// 入力部(N)
int N;
cin >> N;
// 約数をちょうど8つ持つ奇数の個数をカウントする変数。
int ans = 0;
// 奇数のみをカウントするので1からスタートして2ずつ増やす。
for(int i = 1; i <= N; i+=2) {
// i の約数の個数をカウントする変数。
int cnt = 0;
// 1以上i以下の範囲で全探索。
for(int j = 1; j <= i; j++) {
// i % j == 0 の場合の時の j は iの約数 である。
if(i % j == 0) {
cnt++;
}
}
// 約数がちょうど8個の場合、ansに1を加算
if(cnt == 8) {
ans++;
}
}
// ansは 約数をちょうど8つ持つ整数の個数をカウントする変数 なのでそのまま出力。
cout << ans << endl;
}