2466 - 循环数
时间限制 : 1 秒
内存限制 : 128 MB
<span>循环数是那些不包括</span><span><span>0</span></span><span>这个数字的没有重复数字的整数<span> </span></span><span><span>(</span></span><span>比如说</span><span><span>, 81362) </span></span><span>并且同时具有一个有趣的性质</span><span><span>, </span></span><span>就像这个例子</span><span><span>:</span></span>
<!--msthemelist-->
<tbody>
<tr>
<td valign="baseline" width="42">
<img alt="bullet" src="" width="12" height="12" />
</td>
<td valign="top" width="100%">
<!--mstheme--><span><span>如果你从最左边的数字开始<span> </span></span><span><span>( </span></span><span>在这个例子中是</span><span><span>8) </span></span><span>数最左边这个数字个数字到右边</span><span><span>(</span></span><span>回到最左边如果数到了最右边</span><span><span>),</span></span><span>你会停止在另一个新的数字</span><span><span>(</span></span><span>如果没有停在一个不同的数字上,这个数就不是循环数</span><span><span>). </span></span><span>就像</span><span><span>: 8 1 3 6 2 </span></span><span>从最左边接下去数</span><span><span>8</span></span><span>个数字</span><span><span>: 1 3 6 2 8 1 3 6 </span></span><span>所以下一个数字是</span><span><span>6.</span></span><!--msthemelist--></span>
</td>
</tr>
<tr>
<td valign="baseline" width="42">
<img alt="bullet" src="" width="12" height="12" />
</td>
<td valign="top" width="100%">
<!--mstheme--><span><span>重复这样做<span> </span></span><span><span>(</span></span><span>这次从</span><span>“<span>6</span>”</span><span>开始数</span><span><span>6</span></span><span>个数字</span><span><span>) </span></span><span>并且你会停止在一个新的数字上</span><span><span>: 2 8 1 3 6 2, </span></span><span>也就是</span><span><span>2.</span></span><!--msthemelist--></span>
</td>
</tr>
<tr>
<td valign="baseline" width="42">
<img alt="bullet" src="" width="12" height="12" />
</td>
<td valign="top" width="100%">
<!--mstheme--><span><span>再这样做<span> </span></span><span><span>(</span></span><span>这次数两个</span><span><span>): 8 1</span></span><!--msthemelist--></span>
</td>
</tr>
<tr>
<td valign="baseline" width="42">
<img alt="bullet" src="" width="12" height="12" />
</td>
<td valign="top" width="100%">
<!--mstheme--><span><span>再一次<span> </span></span><span><span>(</span></span><span>这次一个</span><span><span>): 3</span></span><!--msthemelist--></span>
</td>
</tr>
<tr>
<td valign="baseline" width="42">
<img alt="bullet" src="" width="12" height="12" />
</td>
<td valign="top" width="100%">
<!--mstheme--><span><span>又一次</span><span><span>: 6 2 8 </span></span><span>这是你回到了起点</span><span><span>, </span></span><span>在从每一个数字开始数</span><span><span>1</span></span><span>次之后</span><span><span>. </span></span><span>如果你在从每一个数字开始数一次以后没有回到起点</span><span><span>, </span></span><span>你的数字不是一个循环数。<span></span></span><!--mstheme--></span><!--msthemelist-->
</td>
</tr>
</tbody>
<span>给你一个数字<span> </span></span><span><span>M (</span></span><span>在</span><span><span>1</span></span><span>到</span><span><span>9</span></span><span>位之间</span><span><span>), </span></span><span>找出第一个比<span> </span></span><span><span>M</span></span><span>大的循环数</span><span><span>, </span></span><span>并且一定能用一个无符号长整形数装下。</span>
题目输入
仅仅一行, 包括M
题目输出
仅仅一行,包括第一个比M大的循环数。
输入/输出样例
输入格式
81361
输出格式
81362
C++解答
#include<stdio.h> #include<string.h> int main() { unsigned long aa; while(scanf("%ld",&aa)!=EOF) { for (unsigned long s=aa+1;;s++) { char a[15]; sprintf(a,"%ld",s); int okk[10]={0},ss=0; for (int i=0;i<strlen(a);i++) if (okk[a[i]-'0']==0) okk[a[i]-'0']=1; else {ss=1;break;} if (ss) continue; int n=0; for (int i=0;i<strlen(a);i++) n+=a[i]-'0'; if (n%strlen(a)!=0) continue; int b[15]={0}; int i=0; while(b[i]==0) { b[i]=1; i=(i+a[i]-'0')%strlen(a); } int w=0; for (int i=0;i<strlen(a);i++) if (b[i]==0) {w=1;break;} if (w) continue; printf("%ld\n",s); break; } } return 0; }