USACO-2.2 Runaround Numbers(列挙)
1636 ワード
テーマリンク:http://train.usaco.org/usacoprob2?a=SceFaavqnaPI&S=runround
/*
ID: 1590291
TASK: runround
LANG: C++
*/
#include <iostream>
#include <fstream>
#include <cstring>
#include <cmath>
using namespace std;
/****************************************************************************************************************
: , 。
:
1, ,
2, 1~9 , 0!!!
****************************************************************************************************************/
int sign[20],cont[20];
int fuc(long x)
{
memset(sign,0,sizeof(sign));
memset(cont,0,sizeof(cont));
int le=(int)log10(x)+1; //k
int num=0;
if(le == 1) return 0;
for(int i = le-1;i >= 0;i -- , x/=10)
sign[i]=x%10;
for(int i = 0;i < le;i ++)
cont[sign[i]]++;
for(int i = 0;i < le;i ++)
if(cont[i] > 1)
return 0;
memset(cont,0,sizeof(cont));
int id=0;
for(int i = 0;i < le;i ++){
cont[sign[id]]++;
if(cont[sign[id]] > 1)
return 0;
id=(id+sign[id])%le;
}
if(id != 0) return 0; // , 0, ~
return 1;
}
int main()
{
ifstream fin("runround.in");
ofstream fout("runround.out");
unsigned long n;
while(fin>>n)
{
for(long i = n+1; ;i ++){
if(fuc(i)){
fout<<i<<endl;
break;
}
}
}
return 0;
}