JAVA-例题(数组)

1

解法一

import java.util.*;
class Demo{
    public static void main(String[] args){
        /*
        思路1:数组长度不固定 需要读取一个数据 数组扩容 填入数据
        数据填入之后进行排序 然后遍历数组依次判断数据的个数
        连续相等
        2 2 2 2 3 3 4 4 4 4 5 5 6 6 6 6 7 7
        
        */
        //1.获取用户输入的数据 动态的扩容数组填充数据
        Scanner scanner = new Scanner(System.in);
        int[] arr=new int[0];
        System.out.print("Enter numbers:");
        while(true){
            int num=scanner.nextInt();
            if(num==0){
                break;
            }
            //验证用户输入数据的正确性
            if(num<1||num>100){
                System.out.println("有非法数据!");
                return;
            }
            arr=copyOf(arr,arr.length+1);
            arr[arr.length-1]=num;
        }
        //2.按照输出结果 将数据中的数据进行排序
        insertSort(arr);
        //3.输出连续相等的数字
        show(arr);
    }
    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;
    }
    public static void insertSort(int[] arr){
        for(int i=1;i<arr.length;i++){
            int e=arr[i];
            int j;
            for(j=i;j>0&&arr[j-1]>e;j--){
                arr[j]=arr[j-1];
            }
            arr[j]=e;
        }
    }
    /*
    Arrays Math都是属于工具类
    Arrays 特殊的是数组的工具类
        toString(arr) 就是将数据的每个元素进行拼接 并返回拼接后的字符串数据
        "[1,2,3,4]"
    */
    public static void show(int[] arr){
        System.out.println(Arrays.toString(arr));
        //此时就将问题转成了如何判断连续相等的数据分别出现多少次
        //[1, 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 5, 5, 6]
        for(int i=0;i<arr.length;){
            int count=1;
            for(int j=i+1;j<arr.length;j++){
                if(arr[j]==arr[i]){
                    count++;
                }else{
                    break;
                }
            }
            System.out.println(arr[i]+" occurs "+count+(count>1?" times":" time"));
            i+=count;
        }
    }
}

解法二

mport java.util.*;
class Demo{
    public static void main(String[] args){
        //思路2:借助计数排序的思想 将数组固定起来
        //0 1 2 3 4 5~100
        //0 单独不算 
        //arr[i]就表示数字i出现的次数
        int[] arr=new int[101];
        //提示用户输入
        Scanner s=new Scanner(System.in);
        System.out.print("Enter numbers:");
        while(true){
            int num=s.nextInt();
            if(num==0){//如果为0退出
                break;
            }else        //不为零时+1
            arr[num]++;
        }
        for(int i=0;i<arr.length;i++){
            if(arr[i]!=0){
                //如果arr[i]>1为times  否则为time
                System.out.println(i+" occurs "+arr[i]+(arr[i]>1?" times":"time"));
            }
        }
    }
}

2

import java.util.*;
class Demo{
    public static void main(String[] args){
      
        func1();
        
    }
    public static void func1(){
        //1.循环遍历数组进行赋值
        Scanner scanner = new Scanner(System.in);
        System.out.print("Enter numbers:");
        int[] arr = new int[10];
        for(int i = 0;i < arr.length;i++){
            arr[i] = scanner.nextInt();
        }
        //2.开始对已有的数据进行去重复操作
        // 1 2 3 3 2 4 3 2 4 1
        // 1 2 3 4
        // method1(arr);        //空间S(n) 时间O(nm)
        // method2(arr);        //空间S(1) 时间O(n^2)
        // method3(arr);
    }
    public static void method3(int[] arr){
        //不创建额外空间 不许改变原先的顺序
        int i=0;
        int size=arr.length;
        while(i<size){
            for(int j=i+1;j<size;){
                if(arr[j]==arr[i]){
                    for(int k=j+1;k<size;k++){
                        arr[k-1]=arr[k];
                    }
                    size--;
                }else{
                    j++;
                }
            }
            i++;
        }
        for(i=0;i<size;i++){
            System.out.print(arr[i]+" ");
        }
    }
    public static void method2(int[] arr){
        //插入排序
        for(int i=1;i<arr.length;i++){
            int e=arr[i];
            int j;
            for(j=i;j>0&&arr[j-1]>e;j--){
                arr[j]=arr[j-1];
            }
            arr[j]=e;
        }
        //连续相等
        for(int i=0;i<arr.length;){ 
            System.out.print(arr[i]+" ");
            int count=1;
            for(int j=i+1;j<arr.length;j++){
                if(arr[j]==arr[i]){
                    count++;
                }else{
                    break;
                }
            }
            i+=count;
        }
    }
    public static void method1(int[] arr){
        int[] newArr=new int[0];
        for(int i=0;i<arr.length;i++){ //O(n)
            if(!contains(newArr,arr[i])){ //O(m)
                newArr=copyOf(newArr,newArr.length+1);
                newArr[newArr.length-1]=arr[i];
            }
        }
        System.out.println(Arrays.toString(newArr));
    }
    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;
    }

}

3

import java.util.Scanner;
 
public class Demo{
	
	public static void main(String[] args){
		//获取用户的输入
		//第一个输入的数据是数据的个数
		Scanner s = new Scanner(System.in);
		System.out.print("输入列表:");
		int len = s.nextInt();
		int[] arr= new int[len];
		for(int i = 0; i < arr.length; i++){
			arr[i] = s.nextInt();
		}
		//对数组进行有序的判断
		if(isSorted(arr)){
			System.out.println("The list is already sorted");
		}else{
			System.out.println("The list is not sorted");
		}
	}	
	public static boolean isSorted(int[] list){
		//如果不是升序排列 那么势必会出现有一组数据 左大右小的情况
		for(int i=1;i<list.length;i++){
			if(list[i-1]>list[i]){
				return false;
			}
		}
		return true;
	}	
}

4

/*
	输入的数据:
		槽子的个数 球的个数=路径的个数
		创造槽子的具体的容器int【】
		每一个小球下落的路径L R 字符串
		对于每一个小球而言其路径中的步骤是随机产生L R
   
*/
import java.util.*;
public class Demo{
	
	public static void main(String[] args){
		//1提示用户输入槽的个数和小球的个数
		Scanner s=new Scanner(System.in);
		System.out.print("Enter the number of balls to drop");
		int balls=s.nextInt();
		System.out.print("Enter the number of slots to in the bean machine:");
		int slots=s.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)]++;
			
		}
		//6输出
		System.out.println(Arrays.toString(arr));
	}
	
	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 arr){
		//4根据槽子的个数计算每一个球下落的路径
		Random random=new Random();
		String path="";
		for(int j=0;j<arr-1;j++){
			if(random.nextInt(2)==0){//向左
				path+="L";
			}else{//向右
				path+="R";
			}
		}
		return path;
	}	
	
}

5

class Demo5{
    public static void main(String[] args){
        int[] list1={1,2,3,4,5,6,7};
        int[] list2={1,2,3,4,5,7,6};
        System.out.println(equals(list1,list2));
    }
    public static boolean equals(int[] list1,int[] list2){
        //判断两个数组是否完全相同
        //判断长度
        if(list1.length!=list2.length){
            return false;
        }
        //判断元素大小
        for(int i=0;i<list1.length;i++){
            if(list1[i]!=list2[i]){
                return false;
            }
        }
        return true;
    }
}

6

class Demo{
    public static void main(String[] args){
        int[] arr={1,1,1,1,2,2,2,2,2,3,3,3,3,3,4};
        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;
                }
            }
            //当次数大于4时输出该数字
            if(count>=4){
                System.out.println(arr[i]);
                return;
            }
            i+=count;
        }
        //但没有连续四次出现时输出没有
        System.out.println("没有!");
    }
}

7

import java.util.*;
public class Demo{
	public static void main(String[] args){
        int[] list1={1,3,5,7,9};
        int[] list2={2,4,6,8,10};
        System.out.println(Arrays.toString(merge(list1,list2)));
    }
    /*
    有序数组的合并
    最主要的问题在于 数组之间有长有短
    */
    public static int[] merge(int[] list1,int[] list2){
        //两个都为空时返回null
        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;
    }
}

8

import java.util.*;
public class Demo8{
	 /*
    数据 一组单词的明文  单词的密文  单词的状态
    program
    1000000 r r
    pr**r**
    */
    public static void main(String[] args){
        Scanner scanner=new Scanner(System.in);
        Random random=new Random();
        //1.创建一个单词表
        String[] words={"naruto","kakashi","sasuke","banana","java","program"};
        //10.最后再去做多单词猜测
        while(true){
            //2.随机从单词表中抽取一个单词
            String word=words[random.nextInt(words.length)];
            //3.创建一个该单词的状态表 默认值是false(密文)
            boolean[] status=new boolean[word.length()];
            int miss=0; //猜错的个数
            //4.开始猜一个单词
            while(true){
                //5.根据单词和状态表 决定密文形式
                String ciphertext=getCipherText(word,status);
                //6.输出密文并提示用户输入字母
                System.out.print("Enter a letter in word "+ciphertext+" >");
                char letter=scanner.nextLine().charAt(0);//"p".charAt(0)
                //7.判断单词中是否有该字母
                if(isContainsLetter(word,letter)){
                    //8.改变单词状态表 已修改/未修改 
                    //true 表示从未修改 第一次来的
                    //false 表示已修改  不是第一次来 提示已经存在
                    if(!changeWordStatus(word,status,letter)){
                        System.out.println("\t "+letter+" is already in the word");
                    }
                }else{
                    System.out.println("\t "+letter+" is not in the word");
                    miss++;
                }
                //9.是否结束
                if(isFinish(status)){
                    System.out.println("The word is "+word+". You miss "+miss+" time");
                    break;
                }
            }
            System.out.print("Do you want to guess another word?Enter y or n:");
            String choice=scanner.nextLine();
            if(choice.equals("n")){
                System.out.println("Welcome!Thank you! FUCK PROGRAM!");
                break;
            }
        }
    }
    public static boolean isFinish(boolean[] status){
        for(int i=0;i<status.length;i++){
            if(!status[i]){
                return false;
            }
        }
        return true;
    }
    public static boolean changeWordStatus(String word,boolean[] status,char letter){
        for(int i=0;i<word.length();i++){
            if(word.charAt(i)==letter){
                if(status[i]){
                    return false;   //说明已经修改
                }else{
                    status[i]=true;
                }
            }
        }
        return true;
    }
    public static boolean isContainsLetter(String word,char letter){
        for(int i=0;i<word.length();i++){
            if(word.charAt(i)==letter){
                return true;
            }
        }
        return false;
    }
    public static String getCipherText(String word,boolean[] status){
        String ciphertext="";
        for(int i=0;i<status.length;i++){
            if(status[i]){
                ciphertext+=word.charAt(i);
            }else{
                ciphertext+="*";
            }
        }
        return ciphertext;
    }
}

9

import java.util.*;
class Demo{
    public static void main(String[] args){
        /*
            (0,0) (0,1) (0,2) (0,3)
            (1,0) (1,1) (1,2) (1,3)
            (2,0) (2,1) (2,2) (2,3)
            累加行的时候 行不动 列动
            累加列的时候 列不动 行动
        */
        //1.输入一个3*4的矩阵
        Scanner scanner=new Scanner(System.in);
        System.out.println("Enter numbers:");
        double[][] matrix=new double[3][4];
        for(int i=0;i<matrix.length;i++){
            for(int j=0;j<matrix[i].length;j++){
                matrix[i][j]=scanner.nextDouble();
            }
        }
        //2.打印每列的和
        for(int col=0;col<matrix[0].length;col++){
            System.out.println(sumColumn(matrix,col));
        }
    }
    public static double sumColumn(double[][] m,int col){
        double sum=0;
        for(int row=0;row<m.length;row++){
            sum+=m[row][col];
        }
        return sum;
    }
}

10

class Demo{
    public static void main(String[] args){
        /*
            (0,0) (0,1) (0,2) 
            (1,0) (1,1) (1,2) 
            (2,0) (2,1) (2,2)
            主对角线上的元素 行列角标是相等的
        */
        int[][] m={
            {1, 2, 3, 4},
            {5, 6, 7, 8},
            {9, 10,11,12},
            {13,14,15,16}
        };
        //主对角线
        int sum=0;
        for(int i=0;i<m.length;i++){
            sum+=m[i][i];
        }
        System.out.println(sum);
        //副对角线
        int subsum=0;
        for(int i=0;i<m.length;i++){
            subsum+=m[i][m.length-1-i];
        }
        System.out.println(subsum);
        
    }
}

11

class Demo {
    public static void main(String[] args){
        //m*n n*p m*p 矩阵相乘 前者的列 必须等于 后者的行
        /*
        1 2 3        1 2    1*1+2*3+3*5   1*2+2*4+3*6
                ×    3 4  = 
        4 5 6        5 6    4*1+5*3+6*5   4*2+5*4+6*6
        对于数学上的一些运算公式 如果直接通过看计算流程还是比较麻烦的
        此时推荐使用已知公式计算!
        */
        double[][] A={ //m*p
            {1,2,3},
            {4,5,6},
            {7,8,9}
        };
        double[][] B={ //p*n
            {0,2.0,4.0},
            {1,4.5,2.2},
            {1.1,4.3,5.2}
        };
        double[][] C=new double[A.length][B[0].length];//m*n
        for(int i=0;i<C.length;i++){
            for(int j=0;j<C[i].length;j++){
                double sum=0;
                for(int k=0;k<B.length;k++){
                    sum+=A[i][k]*B[k][j];
                }
                C[i][j]=sum;
                System.out.print(C[i][j]+" ");
            }
            System.out.println();
        }
    }
}

12

import java.util.*;
class Demo {
    public static void main(String[] args){
        //1.输入方针的尺寸 创建方阵
        Scanner scanner=new Scanner(System.in);
        System.out.print("Enter size:");
        int size=scanner.nextInt();
        int[][] m=new int[size][size];
        //2.随机的给方阵中填入0或1
        Random random=new Random();
        for(int i=0;i<size;i++){
            for(int j=0;j<size;j++){
                m[i][j]=random.nextInt(2);
                System.out.print(m[i][j]+" ");
            }
            System.out.println();
        }
        //3.让行,列,对角线累加 sum==0 sum==size 表示全相等
        checkRow(m);
        checkCol(m);
        checkDiagonal(m);
        checkSubDiagonal(m);
    }
    public static void checkSubDiagonal(int[][] m){
        int sum=0;
        for(int i=0;i<m.length;i++){
            sum+=m[i][m.length-1-i];
        }
        if(sum==m.length||sum==0){
            System.out.printf("副主对角线全相等且是%d\n",sum==0?0:1);
        }
    }
    public static void checkDiagonal(int[][] m){
        int sum=0;
        for(int i=0;i<m.length;i++){
            sum+=m[i][i];
        }
        if(sum==m.length||sum==0){
            System.out.printf("主对角线全相等且是%d\n",sum==0?0:1);
        }
    }
    public static void checkRow(int[][] m){
        for(int i=0;i<m.length;i++){
            int sum=0;
            for(int j=0;j<m[i].length;j++){
                sum+=m[i][j];
            }
            if(sum==m.length||sum==0){
                System.out.printf("第%d行全相等且是%d\n",i+1,sum==0?0:1);
            }
        }
    }
    public static void checkCol(int[][] m){
        for(int j=0;j<m.length;j++){
            int sum=0;
            for(int i=0;i<m.length;i++){
                sum+=m[i][j];
            }
            if(sum==m.length||sum==0){
                System.out.printf("第%d列全相等且是%d\n",j+1,sum==0?0:1);
            }
        }
    }

13

import java.util.*;
class Demo0{
    public static void main(String[] args){
        //输入行列
        Scanner scanner=new Scanner(System.in);
        System.out.print("Enter row ,col:");
        int row=scanner.nextInt();
        int col=scanner.nextInt();
        int[][] m=new int[row][col];
        for(int i=0;i<row;i++){
            for(int j=0;j<col;j++){
                m[i][j]=scanner.nextInt();
            }
        }
        System.out.println(isConsecutiveFour(m));
    }
    public static boolean isConsecutiveFour(int[][] m){
        for(int i=0;i<m.length;i++){
            for(int j=0;j<m[i].length;j++){
                //向右
                if(j<=m[i].length-4){
                    boolean flag=true;
                    for(int c=j+1;c<=j+3;c++){
                        if(m[i][j]!=m[i][c]){
                            flag=false;
                            break;
                        }
                    }
                    if(flag){
                        return true;
                    }
                }
                //向下
                if(i<=m.length-4){
                    boolean flag=true;
                    for(int r=i+1;r<=i+3;r++){
                        if(m[i][j]!=m[r][j]){
                            flag=false;
                            break;
                        }
                    }
                    if(flag){
                        return true;
                    }
                }
                //向右下
                if(i<=m.length-4&&j<=m[0].length-4){
                    boolean flag=true;
                    for(int r=i+1,c=j+1;r<=i+3;r++,c++){
                        if(m[i][j]!=m[r][c]){
                            flag=false;
                            break;
                        }
                    }
                    if(flag){
                        return true;
                    }
                }
                //向右上
                if(i>=3&&j<=m[0].length-4){
                    boolean flag=true;
                    for(int r=i-1,c=j+1;c<=j+3;r--,c++){
                        if(m[i][j]!=m[r][c]){
                            flag=false;
                            break;
                        }
                    }
                    if(flag){
                        return true;
                    }
                }
            }
        }
        return false;//四个方向都没有连续的
    }
}

14

import java.util.*;   
public class Demo {
 
	public static void main(String[] args) {
        //提示用户输入
        System.out.print("Enter number n:");  
        Scanner input = new Scanner(System.in);  
        int n = input.nextInt();  
        System.out.println("Enter "+n+" rows of letters separated by spaces:");  
        char[][] matrix = new char[n][n]; //二维数组 char型
        String temp = null;  
        for(int i = 0; i < n; i++){  
            for(int j = 0; j < n;j++){  
                temp = input.next(); 
                matrix[i][j] = temp.charAt(0); //将字符串转换成数组 
                if(matrix[i][j]>('A'+n-1)) System.out.println("Wrong input: the letters separated must be from A to "+((char)('A'+n-1)));
        }
	  }  
        int[] record = new int[n];  
        Arrays.fill(record, 0);  //将0填充到record中
         
        for(int i = 0; i < n; i++){  
            for(int j = 0; j < n; j++){  
                ++record[(int)(matrix[i][j]-'A')];  
            }  
        }  
          
        for(int i = 0; i < n; i++){  
            for(int j = 0; j < n; j++){  
                ++record[(int)(matrix[j][i] - 'A')];  
            }  
        }  
        boolean flag = true;  
        for(int i = 0; i < n; i++){  
            if(record[i] != 2*n){  
                flag = false;  
            }  
        }  
          if(flag==true)
        System.out.println("The input array is a Latin square"); 
          else  System.out.println("The input array is not a Latin square"); 
    }  
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值