给出指定的数的合集;
接受用户反馈的数字(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位置上。
这道题到这里就没了倘若还有疑问请在下方提出疑问哦!