二进制的趣味魔法
一个个人觉得很有意思的代码,通过用户的五次判断(5个特定的集合数),集合是
否包含用户生日,如果包含输入1否则输入0,最后即能准确输出用户的准确生日。
是不是听上去有种魔术的感觉,原理即是利用二进制实现五位数对0~31这32个数的控制
用我生日举个例子 3-11
1 2代码实现(Java语言)
import java.util.Scanner;
public class GuessYourBirthday {
public static void main(String[] args) {
String set1 = "1 3 5 7\n"+
"9 11 13 15\n"+
"17 19 21 23\n"+
"25 27 29 31\n";
String set2 = "2 3 6 7\n"+
"10 11 14 15\n"+
"18 19 22 23\n"+
"26 27 30 31\n";
String set3 = "4 5 6 7\n"+
"12 13 14 15\n"+
"20 21 22 23\n"+
"28 29 30 31\n";
String set4 = "8 9 10 11\n"+
"12 13 14 15\n"+
"24 25 26 27\n"+
"28 29 30 31\n";
String set5 = "16 17 18 19\n"+
"20 21 22 23\n"+
"24 25 26 27\n"+
"28 29 30 301\n";
; int day = 0;//最后生日结果
Scanner sc = new Scanner(System.in);
int answer = 0 ;
System.out.println("你的生日是否在以下集合里?");
System.out.println(set1);
System.out.println("是请输入1,否则输入0");
answer = sc.nextInt();
day += answer*1;
System.out.println("你的生日是否在以下集合里?");
System.out.println(set2);
System.out.println("是请输入1,否则输入0");
answer = sc.nextInt();
day += answer*(1<<1);//左移一位
System.out.println("你的生日是否在以下集合里?");
System.out.println(set3);
System.out.println("是请输入1,否则输入0");
answer = sc.nextInt();
day += answer*(1<<2);
System.out.println("你的生日是否在以下集合里?");
System.out.println(set4);
System.out.println("是请输入1,否则输入0");
answer = sc.nextInt();
day += answer*(1<<3);//乘2的三次方
System.out.println("你的生日是否在以下集合里?");
System.out.println(set5);
System.out.println("是请输入1,否则输入0");
answer = sc.nextInt();
day += answer*(1<<4);//乘2的4次方
System.out.println("输入你生日的月份:(1~12)");
int mon = sc.nextInt();
System.out.println("你的生日为:"+mon+"月 "+day+"日");
}
}