变态最大值
题目描述
Yougth讲课的时候考察了一下求三个数最大值这个问题,没想到大家掌握的这么烂,幸好在他的帮助下大家算是解决了这个问题,但是问题又来了。他想在一组数中找一个数,这个数可以不是这组数中的最大的,但是要是相对比较大的,但是满足这个条件的数太多了,怎么办呢?他想到了一个办法,把这一组数从开始把每相邻三个数分成一组(组数是从1开始),奇数组的求最大值,偶数组的求最小值,然后找出这些值中的最大值。
输入描述
有多组测试数据,以文件结束符为标志。
每组测试数据首先一个N,是数组中数的个数。(0<N<10000,为降低题目难度,N是3的倍数)
然后是数组中的这些数。
输出描述
输出包括一行,就是其中的最大值。
输入样例
3 4 5 6 6 1 2 3 7 9 5
输出样例
6 5
测试代码
1 #include <stdio.h> 2 3 int main(void) 4 { 5 int n, i, k, t, max, min; 6 int a[10010], b[10010 / 3]; 7 while (scanf("%d", &n) == 1) 8 { 9 for (i = 1; i <= n; i++) 10 { 11 scanf("%d", a + i); 12 } 13 for (i = 1, t = 1, k = 0; i <= n; i += 3) 14 { 15 if (t) 16 { 17 max = a[i]; 18 max = (a[i + 1] > max) ? a[i + 1] : max; 19 max = (a[i + 2] > max) ? a[i + 2] : max; 20 b[k++] = max; 21 t = 0; 22 } 23 else 24 { 25 min = a[i]; 26 min = (min > a[i + 1]) ? a[i + 1] : min; 27 min = (min > a[i + 2]) ? a[i + 2] : min; 28 b[k++] = min; 29 t = 1; 30 } 31 } 32 max = b[0]; 33 for (i = 1; i < k; i++) 34 { 35 if (b[i] > max) 36 { 37 max = b[i]; 38 } 39 } 40 printf("%d\n", max); 41 } 42 return 0; 43 }

浙公网安备 33010602011771号