-
题目描述:
-
输入20个数,每个数都在1-10之间,求1-10中的众数(众数就是出现次数最多的数,如果存在一样多次数的众数,则输出权值较小的那一个)。
-
输入:
-
测试数据有多组,每组输入20个1-10之间的数。
-
输出:
-
对于每组输入,请输出1-10中的众数。
-
样例输入:
-
5 1 5 10 3 5 3 4 8 6 8 3 6 5 10 7 10 2 6 2
-
样例输出:
-
5
-
来源:
初步解决方案:
import java.util.Scanner;
public class zs1057 {
public static void main(String[] args) {
Scanner input =new Scanner(System.in);
int a[] = new int[11] ;
//数据结构用数组也可以用哈希
while(input.hasNext()){
for(int i=0;i<20;i++){
int j = input.nextInt();
a[j]++;
}
for (int j=0;j<10;j++){
System.out.println(j+1+"出现的次数为"+a[j]);
}
}
}
}
第二次优化
import java.util.Arrays;
import java.util.Scanner;
public class zs1057 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int a[] = new int[11];
// 数据结构用数组也可以用哈希
while (input.hasNext()) {
int j;
for (int i = 0; i < 20; i++) {
j = input.nextInt();
a[j]++;
}
/*Arrays.sort(a);
for(int c=0;c<11;c++)
System.out.println("排序之后" + a[c]);
int max = a[10];
int b;
for (b = 9; a[b] == max; b--) {
}
System.out.println("最多的数,众数是" + (a[++b] + 1));
*/
int max=0;
int last=0;
int k;
for(k=0;k<10;k++){
if(a[k]>max) {
max=a[k];
last=k;
}
}
System.out.println("最多的数,众数是" + last);
}
}
}
最终程序
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
// 数据结构用数组也可以用哈希
while (input.hasNext()) {
int a[] = new int[11];
int j;
for (int i = 0; i < 20; i++) {
j = input.nextInt();
a[j]++;
}
int max=0;
int last=0;
int k;
for(k=1;k<11;k++){
if(a[k]>max) {
max=a[k];
last=k;
}
}
System.out.println(last);
}
}
}
注意初始化这里:
int a[] = new int[11]; 要放在 input.hasnext()下面
还有k=1开始,因为a【0】里面的数字不确定,有可能很大的地址随机数。