【♂Not The Triumph♂O(∩_∩)O哈哈~But The Struggle♂】

竞赛决不是捷径,它只是另一种艰辛的生活方式。得到与失去,只有时间会去评判;成功与失败,只有历史能去仲裁。我不会永远成功,正如我不会永远失败一样

  C++博客 :: 首页 :: 联系 ::  :: 管理
  6 Posts :: 239 Stories :: 25 Comments :: 0 Trackbacks

常用链接

留言簿(7)

我参与的团队

搜索

  •  

积分与排名

  • 积分 - 108434
  • 排名 - 229

最新评论

阅读排行榜

评论排行榜

循环数是那些不包括0且没有重复数字的整数(比如81362)并且还应同时具有一个有趣的性质, 就像这个例子:
如果你从最左边的数字开始(在这个例子中是8)向右数最左边这个数(如果数到了最右边就回到最左边),你会停止在另一个新的数字(如果没有停在一个不同的数字上,这个数就不是循环数).就像: 8 1 3 6 2 从最左边接下去数8个数字: 1 3 6 2 8 1 3 6 所以下一个数字是6

重复这样做 (这次从“6”开始数6个数字) 并且你会停止在一个新的数字上: 2 8 1 3 6 2, 也就是2

再这样做 (这次数两个): 8 1

再一次 (这次一个): 3

又一次: 6 2 8 这时你回到了起点,在经过每个数字一次后回到起点的就是循环数。如果你经过每一个数字一次以后没有回到起点, 你的数字不是一个循环数。

给你一个数字 M (在1到9位之间), 找出第一个比 M大的循环数, 输入数据保证结果能用一个无符号长整型数装下。

格式

PROGRAM NAME: runround

INPUT FORMAT:
(file runround.in)

仅仅一行, 包括M

OUTPUT FORMAT:
(file runround.out)

仅仅一行,包括第一个比M大的循环数。

SAMPLE INPUT
81361

SAMPLE OUTPUT
81362

【参考程序】:
/*
ID: XIONGNA1
PROG: runround
LANG: C++
*/
#include
<iostream>
#include
<cstring>
using namespace std;
const int a[10]={0,1,10,100,1000,10000,100000,1000000,
10000000,100000000};
bool bo[10];
int s[10],d[10];
int n,len;
bool work()
{
    
int x=n; len=0;
    
while (x)
    {
        s[
++len]=x%10; x/=10;
    }
    
for (int i=1;i<=len;i++)
        
if (s[i]==0) n+=a[i];
    
bool bk=false;
    
for (int i=2;i<=len;i++)
        
for (int j=1;j<=i-1;j++)
            
if (s[j]==s[i])
            {
                n
+=a[j]; bk=truebreak;
            }
    
return bk;
}
bool check()
{
    
for (int i=1;i<=len;i++) d[i]=s[len-i+1];
    
int p=0,k=1;
    memset(bo,
false,sizeof(bo));
    
while (p<len)
    {
        
if (bo[d[k]]) return false;
        bo[d[k]]
=true;
        k
+=d[k];
        
while (k>len) k-=len;
        p
++;
    }
    
if (k!=1return false;
    
return true;
}
int main()
{
    freopen(
"runround.in","r",stdin);
    freopen(
"runround.out","w",stdout);
    scanf(
"%d",&n);
    
while (true)
    {
        n
++;
        
while (work());
        
if (check())
        {
            printf(
"%d\n",n);
            
break;
        }
    }
    
return 0;
}
posted on 2009-07-18 10:33 开拓者 阅读(350) 评论(0)  编辑 收藏 引用 所属分类: USACO 题解

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理