java —— 数字的出现次数
题目描述:
给定n个数,这n个数的范围在0到10之间,统计这n个数中每个数出现的次数
输入格式:
输入的第一行一个整数n
第二行n个整数,用空格隔开
输出格式:
对于每一个出现的数,从小到达输出这个数以及这个数出现的次数,用空格隔开
限制:1 <= n <= 500
样例:
输入:
7
1 3 0 5 5 4 3
输出:
0 1
1 1
3 2
4 1
5 2
代码如下:
方法一:
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt(); // 从键盘输入给定n个数
int[] a = new int[500]; // 最大范围为500
int i = 0, j = 0;
int[] count = new int[500];
do {
a[i++] = sc.nextInt(); // 从键盘输入n个数
} while (i < n);
a = Sort(a, n);
for (i = 0; i < n; i++) { // 将数组中的数作为count数组的下标,比如count[3]就表示3的个数
count[a[i]] = Stat(a, n, i);
}
a = Dele(a, n); // 删除数组中重复的数
for (i = 0; i < a.length; i ++)
System.out.println(a[i] + " " + count[a[i]]);
}
public static int[] Sort(int[] x, int n) { // 对无序的数组进行升序排列并返回排序后的数组
int i = 0, j = 0;
for (i = 0; i < n; i++) { // 利用选择排序
for (j = i + 1; j < n; j++) {
if (x[i] > x[j]) {
int temp = x[i];
x[i] = x[j];
x[j] = temp;
}
}
}
return x;
}
public static int Stat(int[] x, int n, int a) { // 统计数组中某个位置的数的个数(a<=n,a>0)
int i = 0, j = 0, num = 0;
for (i = 0; i < n; i++) {
if (x[i] == x[a])
num++;
}
return num;
}
public static int[] Dele(int[] x, int n) { // 删除数组中重复的数
int[] a = new int[n];
int b = 0;
for (int i = 0; i < n; i ++){
boolean c = true; // 定义一个布尔值
for (int j = i + 1; j < n; j ++){
if (x[i] == x[j]){ // 如果有重复的数 布尔值就发生改变 并且跳出循环
c = false;
break;
}
}
if (c){ // 如果布尔值没有改变就把值赋给a
a[b ++] = x[i];
}
}
int[] c = new int[b];
for (int i = 0; i < b; i ++) // 重新定义一个新的数组同时改变数组的长度
c[i] = a[i];
return c;
}
}
方法二:(提供者:Jplusztx)
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner stdIn= new Scanner(System.in);
int[] nums = new int[11];//题目已经说明,数据是在0~10之间
int n = stdIn.nextInt(); // 从键盘输入整数的个数
for (int i = 0; i < n; i++) {
int num = stdIn.nextInt(); //从键盘输入整数
nums[num]++; // 将输入的数作为数组nums的下标,nums[i] 的个数就代表 i 的个数
} // 同时此方法可以避免重复数字出现
for (int i = 0; i < nums.length; i++) {
if (nums[i] != 0){ // 因为数组nums的下标是我们键盘输入的,因此当nums[i]=0则代表此数字i我们没有输入
System.out.println(i + " " + nums[i]);
}
}
}
}