2021第四届[传智杯]练习赛

题目 2332: 信息学奥赛一本通T1181-整数奇偶排序

题目描述

给定10个整数的序列,要求对其重新排序。排序要求:
1.奇数在前,偶数在后;
2.奇数按从大到小排序;
3.偶数按从小到大排序。

输入格式

输入一行,包含10个整数,彼此以一个空格分开,每个整数的范围是大于等于0,小于等于30000。

输出格式

按照要求排序后输出一行,包含排序后的10个整数,数与数之间以一个空格分开。

样例输入

1
4 7 3 13 11 12 0 47 34 98

样例输出

1
47 13 11 7 3 0 4 12 34 98

解题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import java.util.Scanner;
import java.util.ArrayList;
import java.util.Collections; //排序用

public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
ArrayList<Integer> even = new ArrayList<Integer>();
ArrayList<Integer> odd = new ArrayList<Integer>();
int next = 0;
while (scanner.hasNext()) {
next = scanner.nextInt();
if(next%2 == 0){ //判断偶数
even.add(next);
} else{
odd.add(next);
}

}
Collections.sort(odd,Collections.reverseOrder()); //奇数从大到小排序
Collections.sort(even); //偶数从小到大排序
printArray(odd);
printArray(even);
}
public static void printArray(ArrayList<Integer> arr){
for(int i=0;i<arr.size();i++){
System.out.print(arr.get(i)+" ");
}
}
}

题目 1856: 最小三个数

题目描述

现在我们有n个整数,请按从小到大的顺序,输出前3个数据。

输入格式

一行,一个n, 3<=n<=100。

输出格式

一行,输出前三个最小的数(末尾无空格)。

样例输入

1
2
4
5 2 1 3

样例输出

1
1 2 3

解题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import java.util.Scanner;

public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int frequency = scanner.nextInt();
int[] intarr = new int[frequency];
for (int i=0;i<frequency;i++) {
intarr[i] = scanner.nextInt();
}
sort(intarr);
printArrThree(intarr);
}
public static void printArrThree(int[] arr){
for(int i=0;i<3;i++){ //只打印数组前三个元素
System.out.print(arr[i]+" ");
}
}
public static void sort(int[] arr){ //手写冒泡排序
int backup = 0;
for(int i=0;i<arr.length;i++){
for(int j=0;j<arr.length-1;j++){ //防止Array out of bound,要length-1
if(arr[j]>arr[j+1]){ //逆序,从小到大徘,如果换成<将是从大到小徘
backup = arr[j];
arr[j] = arr[j+1]; //把小的换到前面
arr[j+1] = backup;
}
}
}
}
}