HDU 2673-shǎ崽 OrOrOrOrz(C语言描述)

问题描述

问题是: 为您提供了一系列不同的整数, 请选择 "数字" 如下: 首先选择最大的, 然后是最小的, 然后是第二个最大的, 第二个最小的.
直到所有的数字被选中。例如, 给你 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;
}

猜你喜欢

转载自blog.csdn.net/laugh12321/article/details/79982734
hdu
今日推荐