变态最大值

变态最大值
时间限制:1000 ms | 内存限制:65535 KB
难度:1
描述
Yougth课的时候考察了一下求三个数最大值这个问题,没想到大家掌握的这么烂,
幸好在他的帮助下大家算是解决了这个问题,但是问题又来了。

他想在一组数中找一个数,这个数可以不是这组数中的最大的,
但是要是相对比较大的,但是满足这个条件的数太多了,怎么办呢?
他想到了一个办法,把这一组数从开始把每相邻三个数分成一组(
组数是从1开始),奇数组的求最大值,偶数组的求最小值,然后找出这些值中的最大值。

输入
有多组测试数据,以文件结束符为标志。
每组测试数据首先一个N,是数组中数的个数。(0<N<10000,为降低题目难度,N是3的倍数)
然后是数组中的这些数。
输出
输出包括一行,就是其中的最大值。
样例输入
3
4 5 6
6
1 2 3 7 9 5
样例输出
6
5


  1 /*错误程序 理解错题意 
  2 #include<stdio.h>
  3 int main(){
  4      int i,j,n,s,t,max,min;
  5      int a[1000];
  6    while(scanf("%d",&n)!=EOF){
  7         for(i=0;i<n;i++)
  8    scanf("%d",&a[i]);
  9        max=0;
 10        min=0;//min赋值0,则是最小的,min永远远是0无法记录后来排的数 
 11        
 12        for(i=0;i<n;i++){//i=0,循环将从第一开始记录,这样记录的max将是整个数组的最大值,非要求的数 
 13             if(max<a[i])
 14                
 15                   max=a[i];}
 16       for(i=0;i<n;i++){
 17    
 18             if(min>a[i])
 19             
 20                min=a[i];
 21           }
 22          
 23            s=n/3;
 24       if(s%2==0)
 25          printf("%d
",min);
 26          else 
 27         printf("%d
",max);
 28      }
 29      return 0;
 30     }
 31     */
 32      
 33     
 34     
 35 
 36 /*    
 37 #include<stdio.h>
 38 int main(){
 39      int i,j,n,s,t,max,min;
 40      int a[1000];
 41    while(scanf("%d",&n)!=EOF){
 42         for(i=0;i<n;i++)
 43    scanf("%d",&a[i]);
 44       
 45        
 46     for(j=n-3;j<=n-1;j++)          //冒泡排序, 将导致只有3组数的结果错误 
 47        for(i=n-4;i<=n-1-j;i++)
 48         if(a[i]>a[i+1])
 49       {t=a[i];a[i]=a[i+1];a[i+1]=t;}
 50          
 51            s=n/3;
 52       if(s%2==0)
 53          printf("%d
",a[n-3]);
 54          else 
 55         printf("%d
",a[n-1]);
 56      }
 57      return 0;
 58     }
 59     
 60 
 61 
 62        */
 63        修改正确结果 
 64 #include<stdio.h>
 65 int max(int a,int b,int c)
 66   {
 67       int t;
 68        if(a>b)
 69     {t=a,a=b,b=t;}
 70       if(a>c)
 71     {t=a,a=c,c=t;}
 72       if(b>c)
 73     {t=b,b=c,c=t;}
 74       return c;
 75   } 
 76 int min(int a,int b,int c)
 77   {
 78       int t;
 79        if(a>b)
 80     {t=a,a=b,b=t;}
 81       if(a>c)
 82     {t=a,a=c,c=t;}
 83       if(b>c)
 84     {t=b,b=c,c=t;}
 85         
 86     return a;
 87   }
 88 int main(){
 89      int i,n,t;
 90      int a[10100],b[10100];
 91    while(scanf("%d",&n)!=EOF){
 92         for(i=0;i<n;i++)
 93    scanf("%d",&a[i]);
 94       for(i=0;i<n/3;i++)
 95           {
 96               if(i%2==0)
 97                 b[i]=max(a[i*3],a[i*3+1],a[i*3+2]);
 98               else
 99               b[i]=min(a[i*3],a[i*3+1],a[i*3+2]); 
100           } 
101       t=0;
102          for(i=0;i<n/3;i++)
103             {
104                 if(t<b[i])
105                    t=b[i];
106             }
107     printf("%d
",t);}
108        return 0;
109    }
110    


 
原文地址:https://www.cnblogs.com/acmgym/p/3648452.html