问题描述
问题是: 为您提供了一系列不同的整数, 请选择 "数字" 如下: 首先选择最大的, 然后是最小的, 然后是第二个最大的, 第二个最小的.
直到所有的数字被选中。例如, 给你 1 2 3 4 5, 你应该输出 5 1 4 2 3 。
直到所有的数字被选中。例如, 给你 1 2 3 4 5, 你应该输出 5 1 4 2 3 。
输入
有多个测试用例, 每个案例从一个整数 n (1 < = N < = 10000) 开始, 跟随 N 个不同的整数。
输出
输出上面描述的不同整数序列。
示例输入
5
1 2 3 4 5
样品输出
5 1 4 2 3
我们可以将输入的N个整数存入数组中,在用qsort( )函数对数组进行由大到小的排列,
将数组排序后,设置两个指针l=0,r=n-1,每次移动指针取值即可 。代码如下:
#include <stdio.h>
#include <stdlib.h>
int mycomp(const void * p1, const void * p2);
int main(void)
{
int ch[10000], n;
while (scanf("%d", &n) != EOF)
{
for (int i = 0; i < n; i++)
scanf("%d", &ch[i]);
qsort(ch, n, sizeof(int), mycomp); // 对数组进行排序
int l = 0, r = n - 1;
for(int i = 0; i < n - 1; i++)
if (i % 2 == 0)
printf("%d ", ch[r--]);
else
printf("%d ", ch[l++]);
printf("%d\n", ch[l++]);
}
return 0;
}
/* 按从大到小的顺序排序 */
int mycomp(const void * p1, const void * p2)
{
/* 要使用指向 int 的指针来访问这两个值 */
const int * a1 = (const int *) p1;
const int * a2 = (const int *) p2;
if (*a1 < *a2)
return -1;
else if (*a1 == *a2)
return 0;
else
return 1;
}