Hướng dẫn giải của [200 đề thầy Đức] Bài 17: Tháp may mắn
Chỉ dùng lời giải này khi không có ý tưởng, và đừng copy-paste code từ lời giải này. Hãy tôn trọng người ra đề và người viết lời giải.
Nộp một lời giải chính thức trước khi tự giải là một hành động có thể bị ban.
Nộp một lời giải chính thức trước khi tự giải là một hành động có thể bị ban.
Hướng dẫn giải
Cần tìm B nhỏ nhất sao cho A + B (lấy chữ số của giá trị tuyệt đối) chứa chữ số 8. Thử lần lượt B = 1, 2, ... và kiểm tra từng số bằng cách tách chữ số.
Chỉ viết 1 sub vì bài này đã đơn giản: trong 10 số liên tiếp luôn có một số tận cùng bằng 8 nên vòng lặp chạy tối đa khoảng 10 lần, đây đã là cách tối ưu. Đạt 35/35 test.
#include <bits/stdc++.h>
using namespace std;
// Kiểm tra số v (lấy giá trị tuyệt đối) có chứa chữ số 8 hay không
bool coSo8(long long v) {
if (v < 0) v = -v;
while (v > 0) {
if (v % 10 == 8) return true;
v /= 10;
}
return false;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
long long A;
cin >> A;
// Thử lần lượt B = 1, 2, ...; trong 10 số liên tiếp luôn có một số tận cùng bằng 8 nên vòng lặp rất ngắn
long long B = 1;
while (!coSo8(A + B)) B++;
cout << B << "\n";
return 0;
}
Bình luận