苦逼的周大爷

博客园 首页 联系 订阅 管理

Description

 

已知一个已经从小到大排列好的数组,所谓这个数组中的一个平台,就是连续的一串值相同的元素,并且这一串元素不能再延伸。例如,在 1,2,2,3,3,3,4,5,5,6 中 1、2,2、3,3,3、4、5,5、6 都是平台。试编写一个程序,接收一个数组,输出这个数组中所有平台和最长平台的个数与长度。

 

Input

 

本题有多组输入数据。第一行是输入数据的组数T,每组数据有两行,第一行是一个整数n,表示下一行有n个数据输入,每个输入数据后有一个空格。1<=T<=20,1<=n<=1000。

 

Output

 

对应每组数据,应输出两行,第一行是两个用空格隔开的数(注意该行尾没有空格),第一个数表示最长平台的个数,第二个数表示最长平台的长度,第二行是所有的平台,平台应按在数组中出现的顺序输出,最后一个平台后没有空格。

 

Sample Input

 

1
10
1 2 2 3 3 3 4 5 5 6 

 

Sample Output

 

1 3
{1},{2,2},{3,3,3},{4},{5,5},{6}

解法:

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 
 4 int main()
 5 {
 6     int i,T,n;
 7     scanf("%d",&T);
 8     for(i=0;i<T;i++)
 9     {
10         scanf("%d",&n);
11         int j,a[1010];
12         for(j=0;j<n;j++)
13         {
14             scanf("%d",&a[j]);
15         }
16         int max=a[0],b[1010]={},count=0,s=0,c[1010]={},min=0;
17         c[0]=max;
18         for(j=0;j<n;j++)
19         {
20             if(a[j]==max)
21             count++;
22             if(a[j]>max)
23             {
24                 max=a[j];
25                 b[s]=count;
26                 if(b[s]>min)
27                 min=b[s];
28                 count=1;
29                 c[s+1]=max;//每个平台的数字 c[]
30                 s++;//s+1表示有的平台数
31             }
32             if(j==n-1)
33             {
34                  b[s]=count;
35                  if(b[s]>min)
36                  min=b[s];
37             }
38         }
39         int l;
40         for(j=0;j<s+1;j++)
41         {
42             if(b[j]==min)
43             {
44                 l++;
45             }
46         }
47         printf("%d %d\n",l,min);
48         l=0;
49         int x,y=0;
50         for(j=0;j<s+1;j++)
51         {
52             printf("{");
53             for(x=0;x<b[y];x++)
54             {
55                 if(x<=b[y]-2)
56                 printf("%d,",c[j]);
57                 else if(x==b[y]-1)
58                 printf("%d",c[j]);
59             }
60             if(j<=s-1)
61             printf("},");
62             else if(j==s)
63             printf("}");
64             y++;
65         }
66        printf("\n");
67     }
68     return 0;
69 }

 

posted on 2013-10-17 21:52  苦逼的周大爷  阅读(355)  评论(0编辑  收藏  举报