标签:
题意为一个数从最左边开始,往右数这个位上的个数个,然后这样走一圈,回到起点,每个数字都访问过且只访问一次,这个数字就是循环数
要求找出第一个比N大的循环数
/*
ID: modengd1
PROG: runround
LANG: C++
*/
#include <iostream>
#include <math.h>
#include <stdio.h>
#include <memory.h>
using namespace std;
bool isarroud(int x)
{
int A[20];
int Size=0;
bool vis[10];
memset(vis,false,sizeof(vis));
for(Size=0;x>0;Size++)
{
A[Size+1]=x%10;
if(A[Size+1]==0)
return false;
if(vis[A[Size+1]])
return false;
vis[A[Size+1]]=true;
x/=10;
}
int tag=0,i;
//因为A数组中存储方向的关系,i表示的是从左往右数第几位数,但第i位数字在数组中的A[Size]位置
for(i=0;!(tag&1<<i);i=(i+A[Size-i])%Size)
tag|=1<<i;
if(tag==(1<<Size)-1&&i==0)
return true;
return false;
}
int main()
{
freopen("runround.in","r",stdin);
freopen("runround.out","w",stdout);
int N;
scanf("%d",&N);
while(N++)
{
if(isarroud(N))
break;
}
cout<<N<<endl;
return 0;
}
标签:
原文地址:http://www.cnblogs.com/modengdubai/p/4780799.html