蛮简单的题,直接枚举就行了,稍微剪枝,注意数字不能重复出现并且没有0.下面贴出代码,以作纪念。

View Code
 1 /*{
 2 ID:jzy3209981
 3 PROG:runround
 4 LANG:C++
 5 }*/
 6 #include<stdio.h>
 7 #include<iostream>
 8 #include<string.h>
 9 #include<math.h>
10 using namespace std;
11 
12 
13 int move(char *fin,int n,int len)
14 {
15     switch(fin[n])
16     {
17     case '1':return (n+1)%len;
18     case '2':return (n+2)%len;
19     case '3':return (n+3)%len;
20     case '4':return (n+4)%len;
21     case '5':return (n+5)%len;
22     case '6':return (n+6)%len;
23     case '7':return (n+7)%len;
24     case '8':return (n+8)%len;
25     case '9':return (n+9)%len;
26     }
27     return 0;
28 }
29 
30 int main()
31 {
32     freopen ("runround.in","r",stdin);
33     freopen ("runround.out","w",stdout);
34     int o,len,i=0,now,j,s,p;
35     char oringe[15];
36     int sign[15];
37     int digit[10];
38     scanf("%d",&o);
39     sprintf(oringe,"%d",o);
40     len=strlen(oringe);    
41     o++;
42     if(oringe[0]-48==len||len==1)
43     {    
44         for(i=1;i<=len+1;i++)
45             oringe[i-1]=i+48;
46         oringe[i-1]=NULL;
47         memset(sign,0,sizeof(sign));
48         o=atoi(oringe);
49         len++;
50     }        
51     for(j=o;;j++)
52     {
53         sprintf(oringe,"%d",j);    
54         len=strlen(oringe);
55         memset(digit,0,sizeof(digit));
56         p=0;
57         for(i=0;i<len;i++)
58         {
59             digit[oringe[i]-48]++;
60             if(digit[oringe[i]-48]>1||oringe[i]=='0')
61                 p=1;
62         }
63         if(p==1)
64             continue;    
65         s=0;
66         i=0;
67         memset(sign,0,sizeof(sign));
68         now=move(oringe,0,len);
69         while(1)
70         {
71             if(sign[now]!=0&&i!=len)
72             {
73                 s=1;
74                 break;
75             }
76             else if(sign[now]==0)
77             {
78                 sign[now]++;
79                 i++;
80                 now=move(oringe,now,len);
81             }
82             else if(sign[now]!=0&&i==len)
83             {
84                 s=2;
85                 break;
86             }
87         }
88         if(s==2)
89             break;
90         else if(s==1)
91             continue;
92     }
93     printf("%d\n",j);
94     return 0;
95 }

 

posted on 2012-07-23 11:15  醉春雨  阅读(137)  评论(0)    收藏  举报