题目:http://hustoj.sinaapp.com/problem.php?id=1843
这题我做了有五个小时...就是没读懂题目中 "从每一个数字开始数一次" 是什么意思...
思路:既然是循环我就构建了个循环链表,然后从M往上一个个枚举。
#include <iostream> #include <cmath> #include <stdio.h> using namespace std; int digit[10]; int num; struct nodes { int n; nodes *next; }node[10]; void createlist() { nodes *c; node[0].n=digit[0]; c=&node[0]; for(int i=1;i<num;i++) { c->next=&node[i]; c=c->next; c->n=digit[i]; } c->next=&node[0]; } int cycle(nodes * head) { int start = head->n; nodes *p=head,*c=head; for(int i=0;i<num;i++) { for(int j=0;j<p->n;j++) { c=c->next; } if(c==p) return 0; p=c; if(p->n==start ) { if(i==num-1) return 1 ; else break; } } return 0; } int main() { int m; char temp[100]; cin>>m; for( int i=m+1;;i++) { num=log10(i)+1; sprintf(temp,"%d",i); int isz=0; for(int j=0;j<num;j++) { digit[j]=temp[j]-'0'; if(digit[j]==0) { isz=1; } } if (isz) continue; bool flag = false; for(int j=0;j<num;j++) { for(int k=j+1;k<num;k++) { if(digit[k]==digit[j]) flag=true; } } if(flag) continue; createlist(); if(cycle(&node[0])) { cout << i<<endl; break; } } return 0; }