计算机考研复试真题 特殊序列
题目描述
输入一系列整数,将其中最大的数挑出(如果有多个,则挑出一个即可),并将剩下的数进行排序,如果无剩余的数,则输出-1。
输入描述:
输入第一行包括1个整数N,1<=N<=1000,代表输入数据的个数。 接下来的一行有N个整数。
输出描述:
可能有多组测试数据,对于每组数据, 第一行输出一个整数,代表N个整数中的最大值,并将此值从数组中去除,将剩下的数进行排序。 第二行将排序的结果输出。
示例1
输入
4 1 3 4 2
输出
4 1 2 3
--------------------------------------------------------------------------------------------------------------------------
/* 解题思路:将数据存入数组中,然后利用排序算法升序排列,这里用快速排序算法,先输出数组中最后一个元素,然后在顺序输出数组元素。 如果n=1代表输出最大值后无元素,则输出-1. */ #include<iostream> using namespace std; void quickSort(int arr[],int low,int high){ //快速排序算法 int temp; int i=low,j=high; if(low<high){ temp=arr[low]; //第一个元素作为枢纽,进行划分 while(i<j){ while(j>i&&arr[j]>=temp) --j; if(i<j){ // arr[i]=arr[j]; ++i; } while(i<j&&arr[i]<temp) ++i; if(i<j){ // arr[j]=arr[i]; --j; } } arr[i]=temp; // quickSort(arr,low,i-1); quickSort(arr,i+1,high); } } int main(){ int n; //输入数据个数 while(cin>>n){ int i,a[1000]; for(i=0;i<n;++i) cin>>a[i]; quickSort(a,0,n-1); cout<<a[n-1]<<endl; if(n==1) cout<<-1<<endl; else{ for(i=0;i<n-2;i++){ cout<<a[i]<<" "; } cout<<a[n-2]<<endl; //不输出最后那个空格 } } return 0; }