您的位置:首页 > 其它

CodeForces 550C Divisibility by Eight (规律,暴力)

2016-10-30 17:44 399 查看
题意:

给你一个大数(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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: