java习题——猜数字

479 阅读2分钟

这是我参与11月更文挑战的第6天,活动详情查看:2021最后一次更文挑战

题目描述

从1-31中选择一个数字,经过程序执行后,得出猜想的数字:

解题思路

这里用到了,数字二进制的特点。

我们把1到31这些数字全部转换为二进制,二进制最多占用五位。

将第一位为1的数字放到集合set1中

将第二位为1的数字放到集合set2中

以此类推,我们有了五个集合,set1到set5

这个时候我们分别将要猜的数字与五个集合作比较,如果在该集合中有该数字,就把这一位置位1。

假设我们猜的数字是5,5的五位二进制数是00101.

我们再set1中找到了5,所以将第一位置位1,变为00001(最开始的数字为0,00000)

然后在set3中找到了5,将第三个位置置位1,变为00101

程序代码

package day_01;

import java.util.Scanner;

public class 猜数字 {

	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";
		
		String set2=
				"2 3 6 7\n"+
				"10 11 14 15\n"+
				"18 19 22 23\n"+
				"26 27 30 31";
		
		String set3=
				"4 5 6 7\n"+
				"12 13 14 15\n"+
				"20 21 22 23\n"+
				"28 29 30 34";
		
		String set4=
				"8 9 10 11\n"+
				"12 13 14 15\n"+
				"24 25 26 27\n"+
				"28 29 30 31";
	
		String set5=
				"16 17 18 19\n"+
				"20 21 22 23\n"+
				"24 25 26 27\n"+
				"28 29 30 31";
		
		int day=0;
		Scanner scanner=new Scanner(System.in);
		
		
		System.out.println("以下set中是否有你猜的数字:");
		System.out.println(set1);
		System.out.print("有输入1,没有输入0");
		int answer=scanner.nextInt();
		day+=answer*1;

		System.out.println("以下set中是否有你猜的数字:");
		System.out.println(set2);
		System.out.print("有输入1,没有输入0");
		answer=scanner.nextInt();
		day+=answer*(1<<1);

		System.out.println("以下set中是否有你猜的数字:");
		System.out.println(set3);
		System.out.print("有输入1,没有输入0");
		answer=scanner.nextInt();
		day+=answer*(1<<2);
		
		System.out.println("以下set中是否有你猜的数字:");
		System.out.println(set4);
		System.out.print("有输入1,没有输入0");
		answer=scanner.nextInt();
		day+=answer*(1<<3);
		
		System.out.println("以下set中是否有你猜的数字:");
		System.out.println(set5);
		System.out.print("有输入1,没有输入0");
		answer=scanner.nextInt();
		day+=answer*(1<<4);
		
		System.out.println("你猜的数字是:"+day);
	}

}

结果演示

要猜的数字为22

image.png