二进制的趣味魔法

2019-01-12  本文已影响0人  掌灬纹

一个个人觉得很有意思的代码,通过用户的五次判断(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+"日");

}        

}

上一篇下一篇

猜你喜欢

热点阅读