您的位置:首页 > 其它

USACO2.2.3 Runaround Numbers (runround)

2015-01-28 17:52 148 查看
//这是一个小技巧,用此可直接得出数字x的位数
int k=log10(x)+1;


从n+1开始判断每个数字是否符合,符合即输出,程序结束。

/*
ID:xsy97051
LANG:C++
TASK:runround
*/
#include <cstdio>
#include <cstring>
#include <cmath>
#include <iostream>
using namespace std;
int n,q[10000],vis[20];
int bis[20];

int pan(long long x)
{
memset(vis,0,sizeof(vis));
memset(bis,0,sizeof(bis));
int k=log10(x)+1;
int kk=1;
while(x>0)
{
if(!(x%10)) return 0;
q[k-kk]=x%10;
kk++;
x/=10;
}

for(int i=0;i<k;i++)
vis[q[i]]++;
for(int i=1;i<10;i++)
if(vis[i]>1) return 0;

int qian=0,hou=k;
for(int i=0;i<k;i++)
{
int j=q[qian];
bis[j]++;
if(bis[j]>1) return 0;
qian=(qian+j)%k;
}
if(qian!=0) return 0;

return 1;
}

int main()
{
freopen("runround.in","r",stdin);
freopen("runround.out","w",stdout);
cin>>n;
for(int i=n+1;;i++)
if(pan(i))
{
cout<<i<<endl;
return 0;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: