import java.util.*;
class Class33{
/*
1.提示用户输入元素
2.判断其中是否有4个连续一样的
3.输出
*/
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
System.out.print("Enter the number of values:");
int num=scanner.nextInt();
int[] arr=new int[num];
System.out.print("Enter the values:");
for(int i=0;i<arr.length;i++){
arr[i]=scanner.nextInt();
}
if(isConsecutiveFour(arr)){
System.out.println("The list consecutive fours");
}else{
System.out.println("The list has no consecutive fours");
}
}
public static boolean isConsecutiveFour (int[] arr){
for(int i=0;i<arr.length;i++){
int sum=1; //角标差 判断其是否连续
int count=1;//元素相等的个数
for(int j=i+1;j<arr.length;j++){
if(arr[j]==arr[i]&&j-i==sum){
count++;
sum++;
}
if(count==4){
return true;
}
}
}
return false;
}
}
import java.util.Scanner;
class Class29{
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
int[] arr=new int[100];//定义了一个空数组,之中的数默认都为0,用其存储数的次数
int num;
System.out.print("Enter the integers between 1 and 100:");
while(true){
num=scanner.nextInt();
if(num==0){//输入0跳出
break;
}
arr[num-1]++;//在num-1位置存储num的次数
}
for(int i=0;i<arr.length;i++){//遍历数组
if(arr[i]==1){
System.out.println((i+1)+" occurs 1 time");//num-1=i,所以输出数为i+1
}else if(arr[i]>1){
System.out.println((i+1)+" occurs "+arr[i]+" times");
}
}
}
}
import java.util.*;
class Class36{
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
Random random=new Random();
System.out.print("Enter the size for the matrix: ");
int num=scanner.nextInt();
int[][] arr=new int[num][num];
for(int i=0;i<arr.length;i++){
for(int j=0;j<arr[i].length;j++){
arr[i][j]=random.nextInt(2);//arr[i][j]=Math.random()>0.5?1:0;
System.out.print(arr[i][j]);
}
System.out.println();
}
row(arr);//行
column(arr);//列
diagonal(arr);//主对角线
subdiagonal(arr);//副对角线
}
public static void row(int[][] arr){
for(int i=0;i<arr.length;i++){
int flag=1;
for(int j=1;j<arr[i].length;j++){
if(arr[i][0]!=arr[i][j]){
flag=-1;//标记程序是正常结束还是跳出
break;
}
}
if(flag==1){//正常结束,说明该行元素相同
System.out.println("All "+arr[i][0]+"s on row "+i);
}
}
}
public static void column(int[][] arr){
for(int j=0;j<arr.length;j++){
int flag=1;
for(int i=1;i<arr.length;i++){
if(arr[0][j]!=arr[i][j]){//判断列
flag=-1;
break;
}
}
if(flag==1){
System.out.println("All "+arr[0][j]+"s on column "+j);
}
}
}
public static void diagonal(int[][] arr){
int flag=1;
for(int i=0;i<arr.length;i++){
if(arr[0][0]!=arr[i][i]){//主对角线的元素坐标行列相同
flag=-1;
System.out.println("No same numbers on the major diagonal");
break;
}
}
if(flag==1){
System.out.println("major daigonal is "+arr[0][0]);
}
}
public static void subdiagonal(int[][] arr){
int flag=1;
for(int i=0,j=arr.length-1;i<arr.length-1&&j>=0;i++,j--){
if(arr[i][j]!=arr[i+1][j-1]){
flag=-1;
System.out.println("No same numbers on the sub-diagonal");
break;
}
}
if(flag==1){
System.out.println("sub-daigonal is "+arr[0][arr.length-1]);
}
}
}
4.
import java.util.*;
class Home32{
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
System.out.print("Enter list1: ");
int num1=scanner.nextInt();
int[] arr1=new int[num1];
for(int i=0;i<arr1.length;i++){
arr1[i]=scanner.nextInt();
}
System.out.print("Enter list2: ");
int num2=scanner.nextInt();
int[] arr2=new int[num2];
for(int j=0;j<arr2.length;j++){
arr2[j]=scanner.nextInt();
}
int[] arr3=new int[arr1.length+arr2.length];
int p1=0;
int p2=0;
for(int i=0;i<arr3.length;i++){
if(p1>=arr1.length){//arr1输出结束 把剩下的arr2元素全部放入新的数组中
arr3[i]=arr2[p2++];
}else if(p2>=arr2.length){//arr2输出结束 把剩下的arr1元素全部放入新的数组中
arr3[i]=arr1[p1++];
}else if(arr1[p1]<=arr2[p2]){//二者都未输出结束,比较大小
arr3[i]=arr1[p1++];
}else{
arr3[i]=arr2[p2++];
}
}
System.out.println("The merged list is "+Arrays.toString(arr3));
}
}
5.五子棋
import java.util.Scanner;
class WuZiQi{
/*
1.创建一个棋盘
2.对棋盘进行初始化
3.打印棋盘
4.开始游戏
*/
//1.创建一个棋盘
public static String[][] board=null;//定义一个棋盘数组 全局变量 初始化还需在主函数中
public static Scanner scanner=new Scanner(System.in);
public static void main(String[] args){
//2.对棋盘进行初始化
initBoard();
//3.打印棋盘
printBoard();
//4.开始游戏
startGames();
}
public static void initBoard(){
board=new String[15][15];
for(int i=0;i<board.length;i++){
for(int j=0;j<board[i].length;j++){
board[i][j]="+";
}
}
}
public static void printBoard(){
System.out.print(" ");
for(int i=1;i<=15;i++){
System.out.printf("%-3d",i);//打印列编号
}
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 startGames(){
int player=0;
while(!isGameOver()){//游戏未结束为循环条件
if(player%2==0){
System.out.println(">>>黑方下棋:");
if(!xiaqi("o")){//为false,说明当前位置已经存在棋子,跳到下一循环,黑方继续下棋
continue;
}
}else{
System.out.println(">>>白方下棋:");
if(!xiaqi("#")){
continue;
}
}
player++;
}
System.out.println(">>>游戏结束");
}
public static boolean xiaqi(String chess){
System.out.print(">>>请输入X坐标:");
int x=scanner.nextInt()-1;//标注行数差一
System.out.print(">>>请输入Y坐标:");
int y=scanner.nextInt()-1;
if(board[x][y].equals("+")){//需判断当前位置是否已经标记,如果已经标记就得重新输入
board[x][y]=chess;//当前位置为某一方符号
printBoard();//重新打印棋谱打印当前的棋谱
return true;
}else{
System.out.println(">>>棋子已存在,请重新下棋!");//当前位置已存在棋子
return false;
}
}
public static boolean isGameOver(){
for(int i=0;i<board.length;i++){//遍历棋盘
for(int j=0;j<board[i].length;j++){
if(!board[i][j].equals("+")){//如果当前位置不为空然后开始从四个方向开始找
//向右
if(j<11){
boolean flag=true;
for(int dy=1;dy<=4;dy++){
if(board[i][j]!=board[i][j+dy]){
flag=false;//设标记flag的原因是,当前方向如果不行,不能直接结束,还要判断其他方向,
break;//当其他方向都不行的话,就返回false,游戏结束
}
}
if(flag){
return true;
}
}
//向下
if(i<11){
boolean flag=true;
for(int dx=1;dx<=4;dx++){
if(board[i][j]!=board[i+dx][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;
}
}
if(flag){
return true;
}
}
}
}
}
return false;
}
}
解析:该题在判断是否连成五子的时候,现实情况中可从八个方向中找,但其实上和下,左和右,右上和左下,左上和右下都是一样的,所以我们只需从四个方向找其限制条件,然后判断该方向是否有连续五个棋子,如下图,
/////这次总结的习题都是我在做题过程中觉得比较典型的题,如果你有更好的解法,欢迎在下方评论哦,我们共同进步////////