华中地区高校第七届ACM程序设计大赛——递增序列【2012年5月27日】

 

题目意思:

给一个整数,把各位数字按顺序排列,能否构成一个单调递增(差值为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 }

 

posted @ 2012-05-28 09:35  ZH奶酪  阅读(318)  评论(0编辑  收藏  举报