双调序列

G
题目描述
电脑组的童鞋们经常玩一些智力PK小游戏,某月某日,发源于小朋友又发明了一种新的序列:双调序列,所谓的双调呢主要是满足如下条件描述:

假定有n(n<=1000)个整数(都在long int范围内,即-2147483648~2147483647),双调序列的第一个数是n个整数中的最大数,第二个数是n个整数中的最小数,第三个数是n个数中的第二大数,第四个数是n个数中的第二小数……取过的数不能再取,依次类推,直到结束。

聪明的你听完描述就抿嘴笑了吧?那就请你用程序正确的帮他找出这n个数的双调序列。

输入格式
第1行为一个整数n。

接下来n行给出了题目中所述的n个整数,每行包含一个整数。

输出格式
有n行,每行为一个整数,是满足条件的双调序列

输入输出样例
输入 输出
5 10
10 -9
-1 3
3 -1
3 3
-9

说明/提示
对于100%的数据,n<=1000。

对于这道题,首先可以先用排序,然后依据题目要求用一个循环分别输出:一个循环,同时定义两个变量i, j,一个用来控制最大值,一个用来控制最小值,输出了a[j](最大值),就输出a[i](最小值),最后特别说明的是,这个输出适用于双数的情况,所以最后要特判一下是否是双数,如果不是,输出最中间的那个数。

#include
using namespace std;const int MAX = 10001;
long int a[MAX] = {0};//快速排序是数组有序 
void quicksort(long int a[], int left, int right)
{if(left >= right) return;int i = left, j = right;int temp = a[left];while(i < j){while(i < j && a[j] >= temp)j--;if(i < j) swap(a[i], a[j]);while(i < j && a[i] <= temp)i++;if(i < j) swap(a[i], a[j]);}a[i] = temp;quicksort(a, left, i-1);quicksort(a, i+1, right);
}int main(){int n;cin >> n;for(int i = 1; i <= n; i++)cin >> a[i];//排序   quicksort(a, 1, n);int i, j;for(int i = 1, j = n; i < j ; i++, j--){cout << a[j] << endl << a[i] << endl;}//特判是否是双数个,不是,输出中间值 if(n % 2 != 0) cout << a[n/2+1];return 0;//最后 
}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部