习题课堂开课了:
A(豆机)球落下,碰到障碍会有50%的机会向左或向右,最终落入底下槽子。编写程序提示用户输入球的个数以及机器的槽数,显示槽中球的最终储备量。
如:图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]="+"; //刚开始用“+”代替
}
}
}
}
…