usaco2.23Runaround Numbers

題意看了N久,判斷是不是什麼循環數 ,符合它的規定就行,模擬

/*
    ID: your_id_here
    PROG: runround
    LANG: C++
*/
#include <iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<stdlib.h>
using namespace std;
long long n;
int judge(long long x)
{
    int i;
    int di[15],dd[15],g=0,f[15],k,o;
    memset(f,0,sizeof(f));
    while(x)
    {
        dd[g++] = x%10;
        x/=10;
    }
    for(i = 0 ; i < g ; i++)
    {
        di[i] = dd[g-i-1];
        if(di[i]==0)
        return 0;
    }
    for(i = 0 ; i < g ; i++)
    {
        if(f[di[i]])
          return 0;
        else
          f[di[i]] = 1;
    }
    memset(f,0,sizeof(f));
    k = di[0];
    o = 1;
    while(1)
    {
        int y = k;
        o = (k+o)%g;
        k = di[(o+g-1)%g];
        if(y==k)
           return 0;
        if(f[k])
        {
            break;
        }
        else
            f[k] = 1;
    }
    for(i = 0 ; i < g; i++)
        if(!f[di[i]])
        return 0;
    return 1;
}
int main()
{
    freopen("runround.in","r",stdin);
    freopen("runround.out","w",stdout);
    long long i;
    cin>>n;
    for(i = n+1 ; ;i++)
    {
        if(judge(i))
        {
            cout<<i<<endl;
            break;
        }
    }
    fclose(stdin);
    fclose(stdout);
    return 0;
}


 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章