LyNa rất yêu thích số 8, cô ấy đang học bảng cửu chương nên muốn đi tìm dấu hiệu về bội số của 8. Việt thấy LyNa có hứng thú với Toán học như vậy nên rất vui. Sau khi yêu cầu cô ấy dùng Scrath lập trình trò chơi luyện khả năng ghi nhớ bảng cửu chương thì Việt bèn cho một số nguyên n và yêu cầu LyNa hãy đảo các chữ số trong n sao cho n chia hết cho 8. Loay hoay mãi, Lyna không thể dùng ngôn ngữ kéo thả Scrath để xử lý, cô ấy dù mới học lớp 9 nhưng rất hứng thú với ngôn ngữ `X`, chỉ có điều cô ấy chưa code được tốt lắm. Hãy giúp LyNa xử lý bài toán này nhé! Input Specification Một dòng duy nhất ghi số nguyên: n(1≤length(n)≤2×105) Output Specification In ra Yes nếu số nguyên n có thể biến đổi về một số chia hết cho 8 hoặc No nếu không thể Sample Input 1 Copy 1234 Sample Output 1 Copy Yes Sample Input 2 Copy 1333 Sample Output 2 Copy No Ngôn ngữ `X` : Fortran ,Haskell,VB,Swift,Perl,Prolog,SQLite,SpiderMonkey đặt biệt C++ và Swift
1 câu trả lời
#include <iostream>
#include <vector>
using namespace std;
string s;
vector<int> r(10);
bool check(vector<int> r, int i) {
int a = i % 10, b = i / 10;
r[a]--, r[b]--;
bool ans = (r[a] >= 0) & (r[b] >= 0);
if (s.size() == 2) return ans && (i % 8 == 0);
if (i % 8 == 4) {
return ans & (r[1] + r[3] + r[5] + r[7] + r[9] > 0);
} else {
return ans & (r[2] + r[4] + r[6] + r[8] > 0);
}
};
int main() {
cin >> s;
for (auto i: s) r[i - '0']++;
if (s.size() == 1) {
cout << (s == "8" || s == "0" ? "Yes" : "No");
return 0;
} else {
for (int i = 0; i <= 99; i += 4) {
if (check(r, i))
return cout << "Yes", 0;
}
}
cout << "No";
}
Câu hỏi trong lớp
Xem thêm