输入第一行包括1个整数N,1<=N<=1000,代表输入数据的个数。 接下来的一行有N个整数。
可能有多组测试数据,对于每组数据, 第一行输出一个整数,代表N个整数中的最大值,并将此值从数组中去除,将剩下的数进行排序。 第二行将排序的结果输出。
4 1 3 4 2
4 1 2 3
#include<iostream> #include<vector> #include<algorithm> using namespace std; int main(void) { int n; vector<int> a; while(cin >> n) { a.clear(); for(int i = 0;i < n;i++) { int x; cin >> x; a.push_back(x); } sort(a.begin(), a.end()); int len = a.size(); cout << a[len - 1] << endl;//输出排序后的最后一个数 a.pop_back();//删除最后一个最大数 if(a.size() != 0)//输出剩余序列 { for(vector<int>::iterator it = a.begin();it != a.end();it++) cout << *it << ' '; cout << endl; } else cout << -1 << endl; } return 0; }
#include<bits/stdc++.h> using namespace std; int main() { ios::sync_with_stdio(false); priority_queue<int, vector<int>, greater<int> > q; int n, x, m; while(cin >> n) { m = -1; while(n--) { cin >> x; q.push(x); m = max(m, x); } cout << m << '\n'; if(q.size() == 1) cout << -1; else while(q.size() > 1) { cout << q.top() << ' '; q.pop(); } cout << '\n'; } return 0; }
#include<bits/stdc++.h> //万能头 #include<iostream> #include<cstdio> #include<algorithm> using namespace std; int main(){ int N; while(scanf("%d",&N)!=EOF) { int a[N]; for(int i=0;i<N;i++) { scanf("%d",&a[i]); } sort(a,a+N); if(N==1) { printf("%d\n",a[N-1]); printf("-1\n"); } else { printf("%d\n",a[N-1]); for(int i=0;i<N-1;i++) { printf("%d ",a[i]); } } } return 0; }
#include<stdio.h> int main()//1.排序2.控制输出 { int n,a[1000],i,j,t; scanf("%d",&n); for(i=0;i<n;i++) scanf("%d",&a[i]); for(i=0;i<n-1;i++)//冒泡的趟数 { for(j=0;j<n-1-i;j++)//比较的次数 { if(a[j]>a[j+1]) {//交换 t=a[j]; a[j]=a[j+1]; a[j+1]=t; } } } if(n==1) printf("%d\n-1",a[0]); else{ printf("%d\n",a[n-1]); for(i=0;i<n-1;i++) printf("%d ",a[i]); } }
import java.util.Arrays; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(); int[] arr = new int[n]; for (int i = 0; i < n; i++) arr[i] = scanner.nextInt(); Arrays.sort(arr); System.out.println(arr[n-1]); if (n>1) for (int i = 0; i < arr.length - 1; i++) System.out.print(arr[i]+" "); else System.out.println("-1"); } }
#include<stdio.h> (737)#include<limits.h> void swap(int *a,int *b){ int temp = *a; *a = *b; *b = temp; } //冒泡排序 void sort(int nums[],int n){ for(int i=0;i<n;i++) for(int j=0;j<n-1-i;j++) if(nums[j]>nums[j+1]) swap(&nums[j],&nums[j+1]); } int main(){ int n; int max = INT_MIN,k=0; while(scanf("%d",&n)!=EOF){ int nums[n]; //输入数据并找到最大值 for(int i=0; i<n; i++){ scanf("%d",&nums[i]); if(nums[i]>max) max = nums[i]; } //输出最大值 printf("%d\n",max); if(n==1){ printf("-1"); break; } //排序并输出 sort(nums,n); for(int i=0;i<n-1;i++)//不输出最后的最大值 printf("%d ",nums[i]); } return 0; }
//开始错的两次都是没读懂题目QAQ #include<bits/stdc++.h> using namespace std; int main(){ int n; while(cin>>n){ int *a=new int[n],max=-999999,count=0; for(int i=0;i<n;i++){ cin>>a[i]; if(a[i]>max) max=a[i]; } cout<<max<<endl; sort(a,a+n); if(n==1) cout<<"-1"<<endl; else{ for(int i=0;i<n-2;i++) cout<<a[i]<<" "; cout<<a[n-2]<<endl; } } }
/* 解题思路:将数据存入数组中,然后利用排序算法升序排列,这里用快速排序算法,先输出数组中最后一个元素,然后在顺序输出数组元素。 如果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; }
#include <iostream> #include <vector> #include <algorithm> using namespace std; int main(){ int n; while(cin>>n){ vector<int> v; int max=0; int maxIndex=0; for(int i=0;i<n;i++){ int number; cin>>number; if(max<number){ max=number; maxIndex=i; } v.push_back(number); } cout<<v[maxIndex]<<endl; v.erase(v.begin()+maxIndex); sort(v.begin(),v.end()); for(int i=0;i<v.size();i++){ cout<<v[i]<<" "; } if(v.size()==0){ cout<<-1; } cout<<endl; } }
package com.speical.first;
import java.util.Scanner;
/**
* 希尔排序
*
* 坑 :如果n == 1,还要再输出个-1
* @author Special
* @time 2018/02/09 10:44:22
*/
public class Pro208 {
public static void XierSort(int[] nums) {
int steps = nums.length / 3 + 1;
while(steps > 0) {
for(int i = steps; i < nums.length; i++) {
for(int j = i; j >= steps && nums[j] > nums[j - steps]; j--) {
int temp = nums[j];
nums[j] = nums[j - steps];
nums[j - steps] = temp;
}
}
steps--;
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner input = new Scanner(System.in);
while(input.hasNext()) {
int n = input.nextInt();
int[] nums = new int[n];
for(int i = 0; i < n; i++) {
nums[i] = input.nextInt();
}
XierSort(nums);
if(n > 0) {
System.out.println(nums[0]);
}
if(n > 1) {
for(int i = n - 1; i > 0; i--) {
System.out.print((i == n - 1 ? "" : " ") + nums[i]);
}
}
else if(n == 1) {
System.out.print("-1");
}
System.out.println();
}
}
}
#include <stdio.h> #include <stdlib.h> int cmp(const void *p, const void *q) { return (*(int *)p > *(int *)q) ? 1 : 0; } int main(void) { int n = 0; int i = 0; while (scanf("%d", &n) != EOF) { int arr[n]; for (i = 0; i < n; i++) scanf("%d", &arr[i]); qsort(arr, n, sizeof(int), cmp); printf("%d\n", arr[n-1]); if (n-1 == 0) { printf("%d\n", -1); } else { for (i = 0; i < n-2; i++) printf("%d ", arr[i]); printf("%d\n", arr[n-2]); } } return 0; }
//不知道为什么n=1时要输出-1 #include <iostream> #include <algorithm> using namespace std; int main(){ int n; while(cin>>n){ int i; int a[1000]; for(i=0;i<n;i++) cin>>a[i]; sort(a,a+n); //选择排序 /*for(i=0;i<n;i++){ for(int j=i+1;j<n;j++){ if(a[i]>a[j]){ int temp=a[i]; a[i]=a[j]; a[j]=temp; } } }*/ //冒泡排序 /*for(i=0;i<n-1;i++){ for(int j=0;j<n-1-i;j++){ if(a[j]>a[j+1]){ int temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; } } }*/ 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; }
#include<stdio.h> #include<algorithm> using namespace std; int main(){ int n; int buf[1001]; while(scanf("%d",&n)!=EOF){ int max=0; for(int i=0;i<n;i++){ scanf("%d",&buf[i]); if(buf[i]>max){ max=buf[i]; } } printf("%d\n",max); if(n==1){ printf("-1\n"); break; } sort(buf,buf+n); for(int i=0;i<n-1;i++){ if(i!=n-2)printf("%d ",buf[i]); else printf("%d\n",buf[i]); } } return 0; }为啥我在自己的IDE上是对的 在OJ上只通过了10% 而且错误里写案例里我的答案什么都没显示??
#include<iostream> #include<cstdio> #include<algorithm> using namespace std; const int maxn = 1005; int num[maxn]; int main() { int count = 0; int n; int tmp; while(cin >> n) { for(int i = 0; i < n; ++i) { cin >> num[i]; } sort(num, num+n); cout << num[n-1] << endl; tmp = n-2; if(tmp >= 0) { for(int i = 0; i <= tmp; ++i) { cout << num[i]; if(i < tmp) cout << " "; } } else { cout << -1; } cout << endl; } return 0; }
#include<iostream> using namespace std; #include<vector> #include<algorithm> int main(){ int n; while(cin >> n){ vector<int> v; //v.resize(n); for(int i = 0; i < n; i++){ /*cin >> v[i]; 经典错误!!!!vector容器未开辟大小 可以用resize()函数初始化vector容器的大小*/ //cin >> v[i]; int temp; cin >> temp; v.push_back(temp); } sort(v.begin(), v.end()); cout << v.back() << endl; v.pop_back(); if(v.empty()) cout << "-1" << endl; else{ for(vector<int>::iterator it = v.begin(); it != v.end(); it++) cout << *it << " "; cout << endl; } } return 0; }
用 vector 读取数据, 这样就可以直接 erase掉MaxNum对应的 数据,用数组的话很烦,
#include <iostream> #include <cstdio> #include "vector" #include "algorithm" using namespace std; int main() { int N; scanf("%d", &N); vector<int> num; for (int i = 0; i < N; i++) { int x; scanf("%d", &x); num.push_back(x); } int MaxNum = num[0], MaxIndex = 0; for (int i = 0; i < N; i++) { if (num[i] > MaxNum) { MaxNum = num[i]; MaxIndex = i; } } num.erase(num.begin() + MaxIndex); if (num.empty()) printf("%d\n%d", MaxNum, -1); else { printf("%d\n", MaxNum); sort(num.begin(), num.end()); for (vector<int>::iterator it = num.begin(); it != num.end(); it++) { printf("%d ", *it); } } return 0; }