A問題
整数$A,B,C$ を並べ替えて五七五にできるというのは、整数$A,B,C$ のうち2つが5
で,1つが 7
ということなので、その条件を満たしているかを判定すればよいです。
#include <bits/stdc++.h>
using namespace std;
//Created by karaju
int main() {
int A, B, C;
cin >> A >> B >> C;
int five = 0, seven = 0;
if (A == 5) five++;
if (A == 7) seven++;
if (B == 5) five++;
if (B == 7) seven++;
if (C == 5) five++;
if (C == 7) seven++;
if (five == 2 && seven == 1) {
printf("YES");
}
else {
printf("NO");
}
return 0;
}
他の解答例
#include <bits/stdc++.h>
using namespace std;
//Created by karaju
int main() {
int ABC[3];
cin >> ABC[0] >> ABC[1] >> ABC[2];
sort(ABC, ABC + 3);
if (ABC[0] == 5 && ABC[1] == 5 && ABC[2] == 7) printf("YES");
else printf("NO");
}
B問題
長さ$L$の文字列が$N$個与えられるので、それらを辞書順に並び替えて結合してください。 という問題です。
文字列を辞書順に並び替えるには、ソートを使えば良いです。
文字列を$N$個含んだ配列を作成して、その配列をソートしましょう。
#include <bits/stdc++.h>
using namespace std;
//Created by Karaju
int main() {
int N, L;
cin >> N >> L;
string words[N];
for (int i = 0; i < N; i++) cin >> words[i];
sort(words, words + N);
for (int i = 0; i < N; i++) cout << words[i];
return 0;
}
C問題
$N$円の品物を購入する 嫌いな数字が含まれない 最小金額を求める問題です。
嫌いな数字は$K$個あり、$D_1,D_2,...,D_k$ です。
嫌いな数字が含まれていたら、その金額に1円足した金額について確かめるという方法で $N$ から嫌いな数字を取り除くことができます。
嫌いな数字が含まれているかを確かめるには、一の桁が嫌いな数字かどうかを確かめて、(10で割ったあまり)、その数を10で割って切り捨てる ということを繰り返すという方法があります。
#include <bits/stdc++.h>
using namespace std;
//Created by karaju
int main() {
int n, k;
cin >> n >> k;
int li[10];
for (int i = 0; i < k; i++) {
int d;
cin >> d;
li[d]++;
//配列の嫌いな数字番目を1にする
}
int x; //xの値を1ずつ増やしていく
bool ok;
for (int i = n; true; i++) {
x = i;
ok = true;
while (x) { //xが0になるまで
//一桁ずつ嫌いな数字かどうか確かめる
if (li[x % 10] == 1) {
ok = false;
break;
}
x /= 10;
//一の位を削ぎ落としていく
}
if (ok) { //嫌いな数字が含まれていないなら
cout << i << endl;
return 0;
}
}
return 0;
}
D
あとで