蓝桥模拟赛 小明的节目晚会 JAVA

问题描述

小明要组织一台晚会,总共准备了n个节目。然后晚会的时间有限,他只能最终选择其中的m个节目。

这n个节目是按照小明设想的顺序给定的,顺序不能改变。小明发现,观众对于晚上的喜欢程度与前几个节目的好看程度有非常大的关系,他希望选出的第-个节目尽可能好看,在此前提下希望第二个节目尽可能好看,依次类推。

小明给每个节目定义了一个好看值,请你帮助小明选择出m个节目,满足他的要求。

输入格式

输入的第一行包含两个整数n, m,示节目的数量和要选择的数量。

第二行包含n个整数,依次为每个节目的好看值。

输出格式

输出一行包含m个整数,为选出的节目的好看值。

样例输入
53
31254
样例输出

354

样例说明

选择了第1, 4, 5个节目。

评测用例规模与约定

对于30%的评测用例,1<=n<=20;

对于60%的评测用例,1 <= n <= 100;

对于所有评测用例,1 <= n <= 100000, 0 <=节目的好看值<=100000。

思路:一堆数字里面取最大的m个数,按顺序输出就行。

public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		int n = scanner.nextInt();
		int m = scanner.nextInt();
		int[] arr1 = new int[n + 1];                      // 数组下标从1开始
		for (int i = 1; i < arr1.length; i++) {
			arr1[i] = scanner.nextInt();
		}
		int[] arr2 = Arrays.copyOf(arr1, n + 1);          // 复制arr1数组,下标从1开始
		for (int i = 1; i < arr2.length; i++) {
			for (int j = 1; j < arr2.length - 1; j++) {
				int min = arr2[1];                        // 冒泡排序
				if (arr2[j] > arr2[i]) {
					min = arr2[j];
					arr2[j] = arr2[i];
					arr2[i] = min;
				}
			}
		}
		for (int i = 1; i < arr1.length; i++) {  
			for (int j = arr2.length - 1; j >= m; j--) {  // 取后边最大的数字
				if (arr1[i] == arr2[j]) {                 // 判断相同输出
					System.out.print(arr1[i] + " ");
					break;
				}
			}
		}
	}

小剧场:貌同实异,徒有殊处。

你可能感兴趣的:(蓝桥杯)