PAT(乙级)2020年春季考试 7-2 超标区间 (20分)

7-2 超标区间 (20分)
 

data.JPG

上图是用某科学研究中采集的数据绘制成的折线图,其中红色横线表示正常数据的阈值(在此图中阈值是 25)。你的任务就是把超出阈值的非正常数据所在的区间找出来。例如上图中横轴 [3, 5] 区间中的 3 个数据点超标,横轴上点 9 (可以表示为区间 [9, 9])对应的数据点也超标。

输入格式:

输入第一行给出两个正整数 N(≤)和 T(≤),分别是数据点的数量和阈值。第二行给出 N 个数据点的纵坐标,均为不超过 1000 的正整数,对应的横坐标为整数 0 到 N1。

输出格式:

按从左到右的顺序输出超标数据的区间,每个区间占一行,格式为 [A, B],其中 A 和 B 为区间的左右端点。如果没有数据超标,则在一行中输出所有数据的最大值。

输入样例 1:

11 25
21 15 25 28 35 27 20 24 18 32 23
 

输出样例 1:

[3, 5]
[9, 9]
 

输入样例 2:

11 40
21 15 25 28 35 27 20 24 18 32 23



代码讲解:此题完全可以用一个标志变量来区别区域断没断,因为都是正整数
我用了-1做判断。。。


 1 #include<stdio.h>
 2 int main()
 3 {
 4     int i,n,lim,data,max=0,a=-1,count=0;
 5     scanf("%d %d",&n,&lim);
 6     for(i=0;i<n;i++)
 7     {
 8         scanf("%d",&data);
 9         if(data>lim)
10         {
11             if(-1==a)
12             {
13                 a=i,count++;
14                 printf("[%d,",a);
15             }
16            a=i;        
17         }
18         else
19         {
20             if(a!=-1)
21             {
22                 printf(" %d]\n",a);
23             }
24             a=-1;
25         }
26         max=max>data?max:data;
27     }
28     if(a!=-1)        //由于最后可能都是大于阀值得,最后一个区间很可能没有输出,所以需要判断
29     printf(" %d]\n",a);
30     if(0==count)
31     printf("%d\n",max);
32     return 0;
33 }

 

 

我们发现这道题它区间是一个,还是俩个输出的方法是一样的

比如区间[3, 5]和只有一个[9, 9]是一样的,如果我们改一下,

区间只有一个的,只输出一个数。。。。就不能使用单一

变量了。。。起始都要记录,最后判断是否相等。。。。

 

改题的代码:

 

 

 1 #include<stdio.h>
 2 int main()
 3 {
 4     int i,n,lim,data,max=0,a=-1,b=-1,count=0;
 5     scanf("%d %d",&n,&lim);
 6     for(i=0;i<n;i++)
 7     {
 8         scanf("%d",&data);
 9         if(data>lim)
10         {
11             if(-1==a)
12             {
13                 a=i,count++,b=i;
14             }
15             else
16             {
17                 b=i;
18             }        
19         }
20         else
21         {
22             if(a!=-1)
23             {
24                 if(a!=b)
25                 printf("[%d, %d]\n",a,b);
26                 else
27                 printf("[%d]\n",a);
28                 a=-1;
29             }
30             
31         }
32         max=max>data?max:data;
33     }
34     if(a!=-1)
35     {
36         if(a!=b)
37         printf("[%d, %d]\n",a,b);
38         else
39         printf("[%d]\n",a);
40     }
41             
42     if(0==count)
43     printf("%d\n",max);
44     return 0;
45 }

 

 
posted @ 2020-11-28 21:58  罪梦者  阅读(189)  评论(0)    收藏  举报