题意:
给你一个大数(100位以下)问可不可以通过去掉一些数字(可不去),使这个数是8的倍数。
思路:
本题显然是规律题。但可以不找规律,直接在0到1000中,暴力8的倍数。若大数中含有0到1000中8的倍数,直接把大数拆成这个数就行。
为什么是0到1000呢?因为所有的8的倍数数通过删数字后都可以用0到1000内的8的倍数来表示,也就是说1000是一个循环节。
具体的规律可以不用管,暴力循环节就行。
代码:
0到1000有效状态只有3位数字,3个for暴力即可。
#include <bits/stdc++.h>
using namespace std;
int ans;
bool solve(string str){
str="00"+str;
int n=str.size();
for(int i=0;i<n;i++){
for(int j=i+1;j<n;j++){
for(int k=j+1;k<n;k++){
int num=(str[i]-'0')*100+(str[j]-'0')*10+(str[k]-'0')*1;
if(num%8==0){
ans=num;
return 1;
}
}
}
}
return 0;
}
int main()
{
string str;
while(cin>>str){
if(solve(str))
cout<<"YES"<<endl<<ans<<endl;
else
cout<<"NO"<<endl;
}
}