[url="http://ace.delos.com/usacoprob2?a=3nbwNTZTBNm&S=runround"]英文原题[/url] [url="http://www.wzoi.org/usaco/12%5C205.asp"]中文题译[/url]
相当简单的逐个查找是否满足要求的数,注意题目里说数字是唯一的。
相当简单的逐个查找是否满足要求的数,注意题目里说数字是唯一的。
/*
ID: blackco3
TASK: runround
LANG: C++
*/
#include <iostream>
#include <memory.h>
using namespace std;
int digs[32], n_dig, visited[10];
int is_around( int num ) {
for( n_dig=0; num ; n_dig++ ){
if( (digs[n_dig]=num%10)==0 )
return false ;
num /= 10 ;
}
memset( visited, 0, sizeof(visited) );
int cur_pos=n_dig-1 ;
for( int irun=0; irun<n_dig; irun++ ){
cur_pos -= digs[cur_pos] % n_dig ;
cur_pos = cur_pos<0 ? n_dig+cur_pos : cur_pos ;
if( visited[digs[cur_pos]] )
return false ;
visited[digs[cur_pos]]=1 ;
}
return true ;
}
int main() {
freopen("runround.in", "r", stdin);
freopen("runround.out", "w", stdout);
int n ;
cin >> n ;
while( !is_around(++n) );
cout << n << endl ;
return 0;
}