明明的随机数——快去买糖,小学妹嘴中的棒棒糖快吃完啦
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();
}
}
结束语
最后还是希望大家在评论区积极讨论呀!
好兄弟好兄弟
<随缘学习>
以上是关于明明的随机数——快去买糖,小学妹嘴中的棒棒糖快吃完啦的主要内容,如果未能解决你的问题,请参考以下文章