明明的随机数——快去买糖,小学妹嘴中的棒棒糖快吃完啦

Posted Fearless→

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了明明的随机数——快去买糖,小学妹嘴中的棒棒糖快吃完啦相关的知识,希望对你有一定的参考价值。

解题前言(!!!重点!!!)

在我个人看来,这道题在众多编程题中应该属于相对简单的一道。对于入门编程不久的我而言,虽然已经解出此题,但是其中的算法还有很多地方需要优化。这里就希望各位“工程师”在评论区积极讨论一番,我们一起学习学习。本人在此表示热烈欢迎!!!
在这里插入图片描述

题目描述

明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤100),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。

输入格式

输入有两行,第1行为1个正整数,表示所生成的随机数的个数N。

第2行有N个用空格隔开的正整数,为所产生的随机数。

输出格式

输出也是两行,第1行为1个正整数M,表示不相同的随机数的个数。

第2行为M个用空格隔开的正整数,为从小到大排好序的不相同的随机数。

输入输出样例

输入##1

10
7 100 23 7 100 1 6 6 2 23

输出##1

6
1 2 6 7 23 100 

在这里插入图片描述

Java题解

public class RandomNumberOfMingMing {

	public static void main(String[] args) {
		// 人工生成随机一维整型数组
		int[] randomOneIntArray = artifcialRandomOneIntArray();
		// 去重一维整型数组
		int[] removeDuplicationOneIntArray = oneIntArrayRemoveDuplication(randomOneIntArray);
		// 打印输出去重一维整型数组的长度
		System.out.println(removeDuplicationOneIntArray.length);
		// 升序排序去重一维整型数组
		java.util.Arrays.sort(removeDuplicationOneIntArray);
		// 打印输出升序排序后的去重一维整型数组
		printOneIntArray(removeDuplicationOneIntArray);
	}
	
	// 人工随机一维整型数组生成器
	public static int[] artifcialRandomOneIntArray() {
		java.util.Scanner reader = new java.util.Scanner(System.in);
		int N = reader.nextInt();
		// 控制N输入的范围(0 < N < 101)
		if(N < 1 || N > 100)
			System.exit(0);
		int[] randomOneIntArray = new int[N];
		for(int i = 0; i < N; i ++) {
			int number = reader.nextInt();
			// 控制number输入的范围(0 < N < 1001)
			if(number < 1 || number > 1000)
				System.exit(0);
			randomOneIntArray[i] = number;
		}
		return randomOneIntArray;
	}
	
	// 一维整型数组去重器
	public static int[] oneIntArrayRemoveDuplication(int[] oneIntArray) {
		// 创建临时一维整型数组
		// 目的:先创建与原数组等大的临时数组,
		//     将原数组中不重复的数字按原顺序(不是按原角标)赋值到临时数组中,
		//     这时,临时数组中可能会出现存不满的情况,这样就对了。
		//     在之后的的步骤中还会将临时数组转换成最终满员的去重数组,并返回。
		int[] tempOneIntArray = new int[oneIntArray.length];
		// 不管数组多长,原数组中第一个元素都不应该与临时数组第一个元素重复吧。
		// 这样我们直接把第一个元素“落”下来。
		tempOneIntArray[0] = oneIntArray[0];
		// num为临时数组中元素的下标,num+1表示临时数组的长度。
		int num = 0;
		// i为控制原数组元素下角标
		for(int i = 1; i < oneIntArray.length; i ++) {
			a:{
			// j为控制临时数组元素下角标
			for(int j = 0; j <= num; j ++) {
				// 如果原数组i的元素有与目前临时数组中相同的元素,
				// 则会break a这个代码块,接着执行i++,检索下一个角标为i的元素。
				// 如果原数组角标为i的元素没有与目前临时数组中的所有元素相同,
				// 则会开始执行下面的num++,
				// 并把原数组角标为i的元素赋值到临时数组角标为num上。
				if(tempOneIntArray[j] == oneIntArray[i])
					break a;
			}
			num ++;
			tempOneIntArray[num] = oneIntArray[i];
			}
		}
		// 创建最终去重好的数组,长度为临时数组的“有效长度”
		int[] removeDuplicationOneIntArray = new int[num + 1];
		for(int i = 0; i < num + 1; i ++) {
			removeDuplicationOneIntArray[i] = tempOneIntArray[i];
		}
		return removeDuplicationOneIntArray;
	}
	
	// 一维整型数组打印机
	public static void printOneIntArray(int[] oneIntArray) {
		for(int i = 0; i < oneIntArray.length; i ++) {
			System.out.print(oneIntArray[i] + " ");
		}
		System.out.println();
	}

}

在这里插入图片描述

结束语

最后还是希望大家在评论区积极讨论呀!
好兄弟好兄弟
<随缘学习>

以上是关于明明的随机数——快去买糖,小学妹嘴中的棒棒糖快吃完啦的主要内容,如果未能解决你的问题,请参考以下文章

vijos1325 桐桐的糖果计划

桐桐的糖果计划(tarjan求桥+双连通分量)

用眼过度了?快吃这些补补吧!

修改随机产生300道四则运算题(限制:小学水平)

超级无敌小学四则运算题目程序

明明的随机数