题I

习题课堂开课了:
A(豆机)球落下,碰到障碍会有50%的机会向左或向右,最终落入底下槽子。编写程序提示用户输入球的个数以及机器的槽数,显示槽中球的最终储备量。
图b)的路径为LLRRLLR,图c)的路径为RLRRLRR例如:在这里插入图片描述
如:图b)的路径为LLRRLLR,图c)的路径为RLRRLRR

jin小编分析如下:层数为槽子数减一,每个小球在每层的具体左右路径可由随机函数产生,一个球路径中R的个数将决定它落在哪个槽中(从0开始数),最终槽中球数加一。
import java.util.*;
class A{
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        //提示用户输入
        System.out.print("Enter the number of balls to drop:");
        int balls=sc.nextInt();  //球的个数
        System.out.print("Enter the number of slots in the bean machine:");
        int slots=sc.nextInt();  //槽子的个数
        int[] a=new int[slots];  //建立槽子数组
        for(int i=0;i<balls;i++){   //遍历每个球
        
            String path="";
            for(int j=0;j<slots-1;j++){   //遍历每个球在每层所走过的路径
                path+=Math.random()>0.5?"L":"R"; //随机产生左右路径
            }
            System.out.println(path);
            a[getLocation(path)]++;//每个球路径的R之和及为它相对应的槽子,其上数量加一
        }
        //打印
        for(int i=0;i<a.length;i++){  //槽子数组
            for(int j=0;j<a[i];j++){    //槽子数组每个具体的数
                System.out.print("O");
            }
            System.out.println();
        }
    }
    public static int getLocation(String path){ //查看每个球路径的R之和
        int count=0;
        for(int j=0;j<path.length();j++){
            if(path.charAt(j)=='R'){
                count++;
            }
        }
        return count;
    }
}

本小编这里最终结果是按行打印出每个槽中球数,有宝宝可以留言按列打印哦,谢谢你。
B(模式识别:四个连续相等的数)提示用户输入列表中值的个数以及整数列表,若有四个连续相等的数,显示true,否则返回false。

jin小编分析如下:
import java.util.Scanner;
class B{
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        System.out.print("Enter the number of values:");
        int num=sc.nextInt();
        System.out.print("Enter the values:");
        int[] values=new int[sc.nextInt()];   
        for(int i=0;i<values.length;i++){
              values[i]=sc.nextInt();
        }
        if(isConsecutiveFour(values)){
            System.out.println("The list has consecutive fours");
        }else{
            System.out.println("The list has no consecutive fours");
        }
    }
    public static boolean isConsecutiveFour(int[] values){
        int count=1;
        for(int i=0;i<values.length-1;i++){
            if(values[i+1]==values[i]){
                count++;
                if(count==4){
                    return true;
                }else{
                    count=1;
                }
            }
        }
        return false;
    }
}

C(五子棋)打印一个15*15大小的棋盘格,刚开始每个格子用“+”代替,黑方先下,棋子为“O”;白方棋子为“X”。用户输入X坐标Y坐标代表所下的位置。
在这里插入图片描述
四个方向的判断相当于判断了八个方向。
在这里插入图片描述
红色包围的代表向右判断时棋子所能走的所有路径及j<11,绿色包围的代表向下判断时棋子所能走的所有路径及i<11,蓝色包围的代表向右上判断时棋子所能走的所有路径及i>3&&j<11,黄色包围的代表向右下判断时棋子所能走的所有路径及i<11&&j<11.

jin小编分析如下:
import java.util.Scanner;
class Wuziqi{
    //1.创建一个棋盘
    //2.初始化棋盘
    //3.打印棋盘
    //4.开始游戏
    public static String[][] board=null;      //先假设它为空
    public static Scanner sc=new Scanner(System.in);
    public static void main(String[] args){
        initBoard();      //初始化棋盘
        printBoard();     //打印棋盘
        startGame();      //开始游戏
    }
    public static void startGame(){ //开始游戏
        int player=0;
        while(!isGameOver()){
            if(player%2==0){        //黑方先下
            System.out.println(">>>黑方下棋:");
            if(!xiaqi("O")){
                continue;
            }
        }else{                      //白方
            System.out.println(">>>白方下棋:");
            if(!xiaqi("x")){
                continue;
            }
        }
        player++;
        }
        System.out.println(">>>游戏结束!");
    }
    public static boolean isGameOver(){       //判断四个方向是否有五个一样,游戏是否结束
        for(int i=0;i<board.length;i++){
            for(int j=0;j<board.length;j++){
                if(!board[i][j].equals("+")){
                    //向右
                    if(j<11){
                        boolean flag=true;
                        for(int dx=1;dx<=4;dx++){
                            if(board[i][j]!=board[i][j+dx]){
                                flag=false;
                                break;
                            }
                        }
                        if(flag){
                            return true;
                        }
                    }
                    //向下
                    if(i<11){
                        boolean flag=true;
                        for(int dy=1;dy<=4;dy++){
                            if(board[i][j]!=board[i+dy][j]){
                                flag=false;
                                break;
                            }
                        }
                        if(flag){
                            return true;
                        }
                    }
                    //右下
                    if(i<11&&j<11){
                        boolean flag=true;
                        for(int d=1;d<=4;d++){
                            if(board[i][j]!=board[i+d][j+d]){
                                flag=false;
                                break;
                            }
                        }
                        if(flag){
                            return true;
                        }
                    }
                    //右上
                    if(i>3&&j<11){
                        boolean flag=true;
                        for(int d=1;d<=4;d++){
                            if(board[i][j]!=board[i-d][j+d]){
                                flag=false;
                                break;
                            }
                        }
                        if(flag){
                            return true;
                        }
                    }
                }
            }
        }
        return false;
    }
    public static boolean xiaqi(String chess){          //下棋
        System.out.println(">>>请输入x坐标:");
        int x=sc.nextInt()-1;
        System.out.println(">>>请输入y坐标:");
        int y=sc.nextInt()-1;
        if(board[x][y].equals("+")){
            board[x][y]=chess;
            printBoard();
            return true;
        }else{
            System.out.println("棋子已存在,请重新下棋!");
            return false;
        }      
    }
    public static void printBoard(){       //打印棋盘 
        System.out.print("   ");           //为了使左边一列数字和上边一行数字对准棋盘格
        for(int i=1;i<=15;i++){            //打印棋盘格最上面的数字
            System.out.printf("%-3d",i);   //格式化输出,1-15每个占3位,-3代表左对齐,3代表右对齐
        }
        System.out.println();
        for(int i=0;i<board.length;i++){
            System.out.printf("%-3d",i+1);   //打印棋盘格最左边的数字
            for(int j=0;j<board[i].length;j++){
                System.out.print(board[i][j]+"  ");  //占三个字符
            }
            System.out.println();
        }
    }
    public static void initBoard(){     //初始化棋盘
        board=new String[15][15];       //棋盘为15*15
        for(int i=0;i<board.length;i++){
            for(int j=0;j<board[i].length;j++){
                board[i][j]="+";        //刚开始用“+”代替
            }
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值