看代码和解释即可
package 猜生日号数;
import java.util.Scanner;
/**
* @author 邓雪松 (づ ̄ 3 ̄)づ)
* @create 2021-10-20-15-41
*/
/* 分析:
因为1~31这些数是可以用5位的二进制表示的,因为16+8+4+2+1
然后把这5个数一一用2进制表示
1:xxxx1 最小为1 然后3、7、15...
2:xxx1x
4:xx1xx
8:x1xxx
16:1xxxx
好找点的一点技巧是:把某一位确定下来后,然后别的某1位为1的情况,别的某2位的情况那样写
*/
public class Demo {
public static void main(String[] args) {
int day = 0;
int answer;
int[][][] dates = {
{{1,3,5,7},{9,11,13,15},{17,19,21,23},{25,27,29,31}},
{{2,3,6,7},{10,11,14,15},{18,19,22,23},{26,27,30,31}},
{{4,5,6,7},{12,13,14,15},{20,21,22,23},{28,29,30,31}},
{{8,9,10,11},{12,13,14,15},{24,25,26,27},{28,29,30,31}},
{{16,17,18,19},{20,21,22,23},{24,25,26,27},{28,29,30,31}}
};
Scanner input = new Scanner(System.in);
for(int i=0;i<5;i++){
System.out.println("Is your birthday in Set "+(i+1)+"?");
for(int j = 0;j<4;j++){
for(int k=0;k<4;k++){
System.out.printf("%4d",dates[i][j][k]);
}
System.out.println();//5行打印完一行换一行
}
System.out.print("\nEnter 0 for No and 1 for Yes: ");
//接受输入的位置注意下
answer = input.nextInt();
if(answer==1){
day += dates[i][0][0];
}
}
System.out.print("你的生日是 "+day+"号!");
}
}
完!