数组题目解析(二)

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

题目分析:拼接的关键在于两个数组的长度不确定,可能出现两个数组都为空,有一个数组为空,两个数组都不为空的情况;若两个数组都为空,则输出的数组也为空;若两个数组有一个为空,那么输出不为空的数组;若两个数组都不为空的情况也分为两个数组一样长,和两个数组不一样长的情况。

import java.util.*;
class test7{
    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){
        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;
    }
}

import java.util.*;
class demo11{
    /*
    1.创建单词表
    2.随机抽取一个单词--去单词的角标
    3.创建单词状态表    用status表示   0或1的形式 默认为false  如果返回为false则表示此处为*,返回为true则返回为对应字符的字母
    program
    0000000  当显示为1时代表用户密文变成明文  0变成1
    *******   当0变成1时,对应位置的*变成对应的字母
    4.先要显示单词的密文形式ciphertext   --根据单词的明文和状态表
    5.输出密文并提示用户输入字母 用户输入的是字符
    6.判断单词里面是否有这个字母
        如果没有直接提示每次这个字母   并且miss++
        如果有:判断该字母已经变成明文 true表示从未修改过,false表示已经修改过
    7.是否结束--结束表示的是全显示为1
    */
    public static void main(String[] args){
        Scanner scanner=new Scanner(System.in);
        Random random=new Random();
        //1.创建单词表
        String[] words={"program","apple","banana","happy","lucky"};
        while(true){
        //2.随机抽取一个单词
        String word=words[random.nextInt(words.length)];
        //3.创建单词状态表
        boolean[] status=new boolean[word.length()];
        //4.开始游戏
        int miss=0;
        while(true){
            //5.根据单词和其状态表,决定其密文状态
            String ciphertext=Getciphertext(word,status);
            //6.输出密文
            System.out.print("单词"+ciphertext+">");
            //7.用户输入字母--用户输入的为字符串--此处要将字符串转化为字符形式
            char letter=scanner.nextLine().charAt(0);
            //8.判断单词中是否含有这个字母
            if(isContainletter(word,letter)){
                if(!isChangewordStatus(word,letter,status)){
                     System.out.println("\t"+letter+"该字母已存在");
                }
            }else{
                System.out.println("\t"+letter+"不在单词中");
                miss++;
            }
            if(isFinish(status)){
                System.out.println("你错了"+miss+"次");
                break;
            }
        }
        System.out.print("你是否还继续?Enter y or n:");
            String choice=scanner.nextLine();
            if(choice.equals("n")){
                System.out.println("游戏已结束");
                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 isChangewordStatus(String word,char letter,boolean[] status){
        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 isContainletter(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<word.length();i++){
                if(status[i]){
                    ciphertext+=word.charAt(i);
                }else{
                    ciphertext+="*";
                }
            }
            return ciphertext;
    }
}
发布了21 篇原创文章 · 获赞 0 · 访问量 355

猜你喜欢

转载自blog.csdn.net/weixin_44318477/article/details/104379703