まず、 を単位 に変換して とします。 次に、 種類の重りを使用して、合計が になる組み合わせが存在するかを調べます。
各重り を ~ 回使用する全ての組み合わせを試すには、 重 for 文を使用することで判定を行うことが出来ます。
その後、条件を満たす組み合わせが存在するかどうかを管理する変数 flag を初期値 として宣言し、存在した場合は flag を に更新します。
最後に flag が であれば Yes
、そうでなければ No
を出力することでこの問題を解くことが出来ます。
xxxxxxxxxx
int main(void) {
int a, b, c, d;
double n;
int flag = 0; // flagを初期値である0で宣言
scanf("%lf %d %d %d %d", &n, &a, &b, &c, &d);
int N = (int)(n*1000); // n は 1000 倍しておく
// 4重for文
for (int i = 0; i <= 3; i++) {
for (int j = 0; j <= 3; j++) {
for (int k = 0; k <= 3; k++) {
for (int l = 0; l <= 3; l++) {
int current = a*i + b*j + c*k + d*l;
if (current == N) {
flag = 1; // 確認出来たらflagを1にする
}
}
}
}
}
// flag が 1 なら Yes、flag が 0 なら No を出力する
if (flag == 1) {
printf("Yes");
} else {
printf("No");
}
return 0;
}
xxxxxxxxxx
using namespace std;
int main() {
int a, b, c, d;
double n;
int flag = 0; // flagを初期値0で宣言
cin >> n >> a >> b >> c >> d;
int N = (int)(n*1000); // n は 1000 倍しておく
// 4重for文
for (int i = 0; i <= 3; i++) {
for (int j = 0; j <= 3; j++) {
for (int k = 0; k <= 3; k++) {
for (int l = 0; l <= 3; l++) {
int current = a*i + b*j + c*k + d*l;
if (current == N) {
flag = 1; // 確認出来たら flag を 1 にする
}
}
}
}
}
// flag が 1 なら Yes、flag が 0 なら No を出力する
if (flag == 1) {
cout << "Yes" << endl;
} else {
cout << "No" << endl;
}
return 0;
}
xxxxxxxxxx
n, a, b, c, d = input().split()
n = float(n)
a, b, c, d = int(a), int(b), int(c), int(d)
# n は 1000 倍しておく
N = int(n*1000)
flag = 0 # flagを初期値である0で宣言
# 4重for文
for i in range(4):
for j in range(4):
for k in range(4):
for l in range(4):
current = a*i + b*j + c*k + d*l
if current == N:
flag = 1 # 確認出来たらflagを1にする
# flag が 1 なら Yes、flag が 0 なら No を出力する
if flag == 1:
print("Yes")
else:
print("No")