Java猜号数,猜日期二进制解法

题目要求根据题意可以得知道 需求分析:
给出指定的数的合集;

给出指定的数的合集;

接受用户反馈的数字(0和1);

循环5次;

输出用户心理所选择的数。

看似这些数是没有规律的,其实这里有一个重点**(1 和 0)又恰好5次,挺巧的是数字刚好**为31**** ,就可以想到二进制中的一些数:0001 + 0010 + 0100 + 1000 + 0001 0000 = 31;恰好等于31.
对应1+2+4+8+16 = 31.
我们先来编写第一组数:

  String tet1 = " 1,3,5,7 \n " + "9,11,13,15 \n " + "17,19,21,23 \n " + "25,27,29,31 ";        //当第一次输入为1时,可能出现的数字,必须有1在,剩下的2 4 8 16

这些数是怎么来的勒?
我们回到题目要求在输0,不在输1,如若输入0则第一个二进制数是不是变为了0000,就与0001无关了对吧.但是如果是1就会出现上面这些数,仔细看就会发现这组数是假设当第一个数输入1时可能出现的数字:
0001 = 1;后面还有0010 = 2 或者0000;0100 = 4 或者还是0000; 1000= 8或者0000;0001 0000= 16或者0000;
就会有:
假设第一个输一:
就会出现的情况有0001;0001+0010 = 3 ,0001+0100 = 5 ,0001+0010+0100=7,0001+…+0001 0000 = 31 ;
**意思就是如果存在你的数必然有0001组成
第二组数

  String tet2 = " 2,3,6,7 \n " + "10,11,14,15 \n " + "18,19,22,23 \n " + "26,27,30,31 ";       //当第二次输入一时,可能出现的数字,,必须有2在,剩下的1 4 8 16

假设第二个输一:
就会出现的情况有0010;0010+0001 = 3 ,00010+0100 = 6 ,00010+0001+0100=7,0001+…+0001 0000 = 31 ;
**意思就是如果存在你的数必然有0001组成
后面的数一次可得
第三组数

 String tet3 = " 4,5,6,7 \n " + "12,13,14,15 \n " + "20,21,22,23 \n " + "28,29,30,31 ";      //当第3次输入一时,可能出现的数字,必须有4在,,剩下的1 2  8 16

第四组数

  String tet4 = " 8,9,10,11 \n " + "12,13,14,15 \n " + "24,25,26,27 \n " + "28,29,30,31 ";    //当第四次输入一时,可能出现的数字,必须有8在,,剩下的1 2 4 16

**第五组数

 String tet5 = "16,17,18,19,20\n"+"21,22,23,24,25\n"+"26,27,28,30,31\n";                     //当第5次输入一时,可能出现的数字,可能出现的数字,必须有16 剩下的1  2  4  8

到这里了,我们要怎么记录这些数勒?

 int a = 0;//记录用户输入的数进行累加;
 Scanner in = new Scanner(System.in);
        for(int i = 0;i<5;i++){//循环出上面的5个提示,
            if(i==0){//展示tet1
                System.out.println(tet1);
            }else if(i==1){//展示tet2
                System.out.println(tet2);
            }else if(i==2){//展示tet3
                System.out.println(tet3);
            }else if(i==3){//展示tet4
                System.out.println(tet4);
            }else if(i==4){//展示tet5
                System.out.println(tet5);
            }
            System.out.print("你生日的号数在不在这里面,在输入1不在输入0:");
            int ww = in.nextInt();

                a+=ww*(1<<i);//位运算符1<<1  0000   3210  0001   0010
        }
        System.out.print(a);

这里使用了一个叫做左移运算符<<这个符号怎么理解了?
1<<(移动的下标位置) ;如:0001 这个二进制数,1就在0位置上0010,这个就在1位置上。

这道题到这里就没了倘若还有疑问请在下方提出疑问哦!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值