题目意思:
给一个整数,把各位数字按顺序排列,能否构成一个单调递增(差值为1)的序列.特别的是,0可以放在1前边和9后边,都算是符合要求。
例如
12354---12345 yes
12305---01235 no
1209---90123 yes
980---890 yes
11232---11223 no
1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 char res[2][10]={"NO","YES"}; 5 int main() 6 { 7 int arr[10],sum,i,j,n,l,min,max,flag; 8 while (scanf("%d",&n),n) 9 { 10 l=0;flag=1; 11 memset(arr,0,sizeof(arr)); 12 while (n!=0) 13 { 14 arr[n%10]++; 15 n/=10; 16 l++; 17 } 18 if(arr[0]==0) 19 { 20 i=1; 21 while(arr[i]==0) i++; 22 min=i;max=i+l-1; 23 for (i=min+1;i<=max&&flag;i++) 24 if(arr[i]!=1) flag=0; 25 } 26 else 27 { 28 if(arr[0]==1) 29 { 30 sum=1; 31 for (i=1;i<=9;i++) 32 { 33 if(arr[i]==1) sum++; 34 else break; 35 } 36 for (j=9;j>=1&&i!=10;j--) 37 { 38 if(arr[j]==1) sum++; 39 else break; 40 } 41 if(sum!=l) flag=0; 42 } 43 else 44 { 45 flag=0; 46 } 47 } 48 puts(res[flag]); 49 } 50 return 0; 51 }
本文转自ZH奶酪博客园博客,原文链接:http://www.cnblogs.com/CheeseZH/archive/2012/05/28/2520831.html,如需转载请自行联系原作者