USACO2.2.3 Runaround Numbers (runround)

来源:互联网 发布:华泰证券交易软件 编辑:程序博客网 时间:2024/05/29 16:00

//这是一个小技巧,用此可直接得出数字x的位数int k=log10(x)+1;


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


/*ID:xsy97051LANG: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;      }}



0 0
原创粉丝点击