USACO Training Section 2.2 Runaround Numbers

英文原题  中文题译 

相当简单的逐个查找是否满足要求的数,注意题目里说数字是唯一的。

/*
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;
}

你可能感兴趣的:(C++,c,C#,asp)