the reaon of failure:1、英文太low,英文太low,英文太low,题目都看不懂啊!!
Runaround numbers are integers with unique digits
意思是这个数是整数with unique digits 数字都是唯一的,意思就是不能有重复的数字在这个整数里。
you have ended up back where you started, after touching each digit once
在每个数都经历过一遍后,回到最开始的那个数。
代码:
/*
ID: me
PROG: runround
LANG: C++
*/
#include <iostream>
#include <math.h>
#include <stdio.h>
#include <string.h>
using namespace std;
int qq[15];
int q1[15];
int q2[15];
bool walked[15];
bool walked2[15];
/*int dfs(int x,int y){
memset(q1,0,sizeof(q1));
for(i=0;i<x;i++)
q1[i]=qq[(t+i)%8];
for(i=0;i<x;i++)
qq[]
}*/
int main(){
freopen("runround.in","r",stdin);
freopen("runround.out","w",stdout);
int m,n,t1,f1,l,f2,f3,t3,i,j,k,t2;
cin >> n;
while(true){
n++;
memset(qq,0,sizeof(qq));
memset(q2,0,sizeof(q2));
memset(walked2,0,sizeof(walked2));
f1=n;
f2=0;
f3=0;
l=0;
while(f1){
f3=f1%10;
if(f3&&walked2[f3]==0){q2[f2++]=f3;
walked2[f3]=1;}
else{l=1;};
f1/=10;
}
j=0;
for(i=0;i<f2;i++)
qq[i]=q2[f2-i-1];
if(l==0){
memset(walked,0,sizeof(walked));
k=15;
t1=qq[0];
t2=0;
while(k--){
j=(t1+t2)%f2;
if(qq[j]==t1){
walked[0]=0;
break;
}
walked[j]=1;
t2=j; //1、在此时t2已经发生了改变
t1=qq[j];
// cout << "t1==" << t1 << endl;
//cout << "t2==" << t2 << endl;//题意的要求没读懂,还有一个要求是每个数都循环了一次
}
if(walked[0]==1){
int gg=0;
for(i=0;i<f2;i++)
if(walked[i]==1)gg++;
if(gg==f2){
cout << n <<endl;
return 0;}
}
}
}
return 0;
}