1.(三种思路
)
class test01{
/*
思路一:
数据:存储数字的数组nums 存储次数的数组counts
步骤:
1.获取一个数字
2.判断该数字
2.1 如果是0 则跳出循环
2.2 如果不是
当前数字是否在nums中
在 相应counts位置++
不在 nums扩容将数字传进去 counts扩容 1次数
3.排序nums 同时counts
*/
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int[] nums = new int[0];//存储数字
int[] counts = new int[0];//存储次数
System.out.print("请输入数字:");
while(true){
int number = input.nextInt();
if(number == 0){
break;
}
//获取number的角标
int index = indexOf(nums, number);
if(index != -1){
counts[index] ++;
}else{ //不存在 将number加入nums中 同时计数
nums = addNum(nums,number);
counts = addCounts(counts);
}
}
sort(nums,counts);//对结果进行排序
for(int i=0;i<nums.length;i++){
System.out.println(nums[i]+" occurs "+counts[i]+(counts[i]>1?" times":" time"));
}
}
public static void sort(int[] nums,int[] counts){ //在排序nums的过程中 nums的元素要进行交换 同时对应的counts的元素进行交换
for(int i = 1 ; i < nums.length ;i ++){
int e = nums[i];
int f = counts[i];
int j = i - 1;
while(j>=0&&nums[j]>e){
nums[j+1] = nums[j];
counts[j+1] = counts[j];
j--;
}
nums[j+1] = e;
counts[j+1] = f;
}
}
//向counts数组中加入新的次数默认为1
public static int[] addCounts(int[] counts){
int[] arr = new int[counts.length+1];
for(int i = 0;i < counts.length;i++){
arr[i] = counts[i];
}
arr[arr.length - 1] = 1;
return arr;
}
//向nums数组中加入元素number
public static int[] addNum(int[] nums ,int number){
int[] arr = new int[nums.length+1];
for(int i = 0;i < nums.length;i++){
arr[i] = nums[i];
}
arr[arr.length - 1] = number;
return arr;
}
//获取角标
public static int indexOf(int[] nums,int number){
for (int i = 0; i < nums.length; i++) {
if(nums[i] == number){
return i;
}
}
return -1;
}
}
class Test01{
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int[] arr = new int[0];
int number;
System.out.print("请输入数字:");
while(true){ //读取数字,如果为0,就停止读取
number = input.nextInt();
if(number == 0)
break;
arr = addNumber(arr,number);//不是0,就存入数组
}
sort(arr);//排序
int flag = arr[0];
int count = 0;