5.1
/*
使用计数排序的思想
*/
import java.util.Scanner;
class Demo05_01{
public static void main(String[] args){
int[] arr=new int[101];
Scanner scanner=new Scanner(System.in);
System.out.print("Enter numbers:");
while(true){
int num=scanner.nextInt();
if(num==0){
break;
}
arr[num]++;
}
for(int i=0;i<arr.length;i++){
if(arr[i]!=0){
System.out.println(i+" occurs "+arr[i]+(arr[i]>1?" times":" time"));
}
}
}
}
5.2
import java.util.*;
class Demo05_02{
public static void main(String[] args){
func2();
}
public static void func2(){
int[] arr=new int[0];
Scanner scanner = new Scanner(System.in);
System.out.print("Enter numbers:");
for(int i=0;i<10;i++){
int num=scanner.nextInt();
if(!contains(arr,num)){
arr=copyOf(arr,arr.length+1);
arr[arr.length-1]=num;
}
}
System.out.println(Arrays.toString(arr));
}
//判断数组中是否存在一个数
public static boolean contains(int[] arr,int key){
for(int i=0;i<arr.length;i++){
if(arr[i]==key){
return true;
}
}
return false;
}
//数组动态扩容使用
public static int[] copyOf(int[] arr,int newLen){
int[] newArr=new int[newLen];
for(int i=0;i<arr.length;i++){
newArr[i]=arr[i];
}
return newArr;
}
}
5.3
import java.util.Scanner;
class Demo05_03{
public static void main(String[] args) {
System.out.print("Enter a list:");
Scanner scanner = new Scanner(System.in);
int length = scanner.nextInt();
int[] arr = new int[length];
for (int i = 0; i < arr.length; i++) {
arr[i] = scanner.nextInt();
}
if (isSorted(arr)) {
System.out.print("The list is already sorted");
}
else {
System.out.print("The list is not sorted");
}
}
public static boolean isSorted(int[] arr) {
for (int i = 1; i < arr.length; i++) {
if (arr[i-1] > arr[i]) {
return false;
}
}
return true;
}
}
5.4
import java.util.*;
class Demo05_04{
/*
输入的数据:槽子的个数 球的个数=路径的个数
创建槽子的具体的容器int[]
每一个小球下落的路径L R 字符串
对于每一个小球而言其路径中的步骤是随机产生L R
1.提示用户输入槽子的个数和小球的个数
2.根据已有的槽子的个数去创建槽子容器
3.根据已有的球和槽子的个数去随机创建一个小球下落的路径
4.路径中经过几个钉子?路径的步骤有几步 和槽子的个数有关
5.如何通过路径的经过得知最终所落入的槽子?
*/
public static void main(String[] args){
//1.
Scanner scanner=new Scanner(System.in);
System.out.print("Enter the number of balls to drop:");
int balls=scanner.nextInt();
System.out.print("Enter the number of slots in the bean machine:");
int slots=scanner.nextInt();
//2.
int[] arr=new int[slots];
//3.几个球几个路径path
for(int i=0;i<balls;i++){
String path=getPath(slots);
System.out.println(path);
//5.只要看当前路径中R的个数即可
arr[getR(path)]++;
}
System.out.println(Arrays.toString(arr));
show(arr);
}
public static void show(int[] arr){
int w=arr.length;
int h=0;
for(int i=0;i<arr.length;i++){
if(arr[i]>h){
h=arr[i];
}
}
for(int i=h-1;i>=0;i--){
for(int j=0;j<w;j++){
if(i<arr[j]){
System.out.print("O");
}else{
System.out.print(" ");
}
}
System.out.println();
}
}
public static int getR(String path){
int count=0;
for(int i=0;i<path.length();i++){
if(path.charAt(i)=='R'){
count++;
}
}
return count;
}
public static String getPath(int slots){
//4.根据槽子的个数计算每一个球下落的路径
Random random=new Random();
String path="";
for(int j=0;j<slots-1;j++){
if(random.nextInt(2)==0){ //向左
path+="L";
}else{ //向右
path+="R";
}
}
return path;
}
}
5.5
import java.util.Scanner;
class Demo05_05{
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
int[] list1=new int[0];
int[] list2=new int[0];
System.out.print("Enter list1(End with 0): ");
while(true){
int num=scanner.nextInt();
if(num==0){
break;
}
list1=copyOf(list1,list1.length+1);
list1[list1.length-1]=num;
}
System.out.print("Enter list2(End with 0): ");
while(true){
int num=scanner.nextInt();
if(num==0){
break;
}
list2=copyOf(list2,list2.length+1);
list2[list2.length-1]=num;
}
System.out.println(equals(list1,list2));
}
public static boolean equals(int[] list1,int[] list2){
//判断两个数组是否完全相同
//1.先判断长度
if(list1.length!=list2.length){
return false;
}
//2.再依次判断元素大小
for(int i=0;i<list1.length;i++){
if(list1[i]!=list2[i]){
return false;
}
}
return true;
}
public static int[] copyOf(int[] arr,int newLen){
int[] newArr=new int[newLen];
for(int i=0;i<arr.length;i++){
newArr[i]=arr[i];
}
return newArr;
}
}
5.6
import java.util.Scanner;
class Demo05_06{
public static void main(String[] args){
int[] arr = new int[0];
Scanner scanner = new Scanner(System.in);
System.out.print("Enter the number of values: ");
int n=scanner.nextInt();
System.out.print("Enter the values: ");
while(n>0){
int num=scanner.nextInt();
if(num==0){
break;
}
arr=copyOf(arr,arr.length+1);
arr[arr.length-1]=num;
n--;
}
System.out.print(fourDigit(arr));
}
public static boolean fourDigit(int[] arr) {
for(int i=0;i<arr.length;){
int count=1;
for(int j=i+1;j<arr.length;j++){
if(arr[i]==arr[j]){
count++;
}else{
break;
}
}
if(count>=4){
return true;
}
i+=count;
}
return false;
}
public static int[] copyOf(int[] arr,int newLen){
int[] newArr=new int[newLen];
for(int i=0;i<arr.length;i++){
newArr[i]=arr[i];
}
return newArr;
}
}
5.7
import java.util.*;
class Demo05_07{
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
int[] list1=new int[0];
int[] list2=new int[0];
System.out.print("Enter list1(End with 0): ");
while(true){
int num=scanner.nextInt();
if(num==0){
break;
}
list1=copyOf(list1,list1.length+1);
list1[list1.length-1]=num;
}
System.out.print("Enter list2(End with 0): ");
while(true){
int num=scanner.nextInt();
if(num==0){
break;
}
list2=copyOf(list2,list2.length+1);
list2[list2.length-1]=num;
}
System.out.println(Arrays.toString(merge(list1,list2)));
}
/*
有序数组的合并
最主要的问题在于 数组之间有长有短
*/
public static int[] merge(int[] list1,int[] list2){
if(list1==null&&list2==null){
return null;
}
if(list1==null){
return list2;
}
if(list2==null){
return list1;
}
//只有两个都不是null的情况再考虑具体操作
int[] list3=new int[list1.length+list2.length];
int p1=0;
int p2=0;
int p3=0;
while(true){
if(p1==list1.length&&p2==list2.length){
break;
}
if(p1<list1.length&&p2==list2.length){
list3[p3++]=list1[p1++];
}else if(p1==list1.length&&p2<list2.length){
list3[p3++]=list2[p2++];
}else{
if(list1[p1]<=list2[p2]){
list3[p3++]=list1[p1++];
}else{
list3[p3++]=list2[p2++];
}
}
}
return list3;
}
public static int[] copyOf(int[] arr,int newLen){
int[] newArr=new int[newLen];
for(int i=0;i<arr.length;i++){
newArr[i]=arr[i];
}
return newArr;
}
}