AtCoder ABC 079 C - Train Ticket でWA
AtCoder ABC 079 C - Train Ticketにて、WA(不正解)となってしまう(コードテストはうまくいく)ため質問します。
以下の実装コードではどのように間違っているのでしょうか。
※愚直にifで試すのではなくbit全探索をしたい。
問題:https://atcoder.jp/contests/abc079/tasks/abc079_c
実装コード
c++
1#include <bits/stdc++.h> 2using namespace std; 3 4int main() { 5 vector<int> ticket(4); 6 7 for(int i = 0; i < 4; i++){ 8 cin >> ticket[i]; 9 } 10 11 for(int bit = 0; bit < (1 << 3); bit++){ 12 int ans = 0; 13 14 for(int idx = 0; idx < 3; idx++){ 15 if(bit & (1 << idx)) ans += ticket[idx + 1]; 16 17 else ans -= ticket[idx + 1]; 18 } 19 20 if(ans == 7){ 21 cout << ticket[0]; 22 23 for(int idx = 0; idx < 3; idx++){ 24 if(bit & (1 << idx)) cout << '+'; 25 else cout << '-'; 26 27 cout << ticket[idx + 1]; 28 } 29 30 cout << "=7" << endl; 31 32 } 33 } 34} 35
#修正後
#include <bits/stdc++.h> using namespace std; int main() { int abcd; cin >> abcd; vector<int> ticket(4); for(int i = 3; i > -1; i--){ ticket[i] = (abcd%10); // 1桁取り出していく abcd /= 10; } for(int bit = 0; bit < (1 << 3); bit++){ int ans = ticket[0]; for(int idx = 0; idx < 3; idx++){ if(bit & (1 << idx)) ans += ticket[idx + 1]; else ans -= ticket[idx + 1]; } if(ans == 7){ cout << ticket[0]; for(int idx = 0; idx < 3; idx++){ if(bit & (1 << idx)) cout << '+'; else cout << '-'; cout << ticket[idx + 1]; } cout << "=7" << endl; } } }
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。