现在,我们看一下
1 3 5 7
9 11 13 15
17 19 21 23
25 27 29 31
这一组数有什么规律?
他们看似没有任何规律,但是,把他们变成二进制,就会发现,他们的二进制第0位都是1!
2 3 6 7
10 11 14 15
18 19 22 23
26 27 30 31
看这一组,没错!他们的二进制第一位都是1!
所以,假如小明的生日是在当月第三天,那么第一组数和第二组数都有他的那一天!
那知道这个有什么用呢?
我们看一下,第一组是第0位二进制为1的数,那用一个变量存起来,第0位代表1,那就让那个变量的值加1(注意初始化),第二组第一位是1,第一位对应二进制的2,所以那个变量的值要加2,这样就是3,我们就知道了小明的那一天,另外几组都没有3这个数字,就可以确定小明就是3那一天,运用这个原理,我们就可以做猜生日游戏!
上代码:
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67#include <iostream> #include <windows.h> using namespace std; int main() { char answer; int b = 0, m = 0; cout << "你生日的那一月有在这几个数字里吗?n"; cout << " 1 3 5n 7 9 11n输入 Y 代表有,输入 N 代表没有:n"; cin >> answer; if(answer == 'Y') m += 1; system("cls"); cout << "你生日的那一月有在这几个数字里吗?n"; cout << " 2 3 6n 7 10 11n输入 Y 代表有,输入 N 代表没有:n"; cin >> answer; if(answer == 'Y') m += 2; system("cls"); cout << "你生日的那一月有在这几个数字里吗?n"; cout << " 4 5 6n 7 12n输入 Y 代表有,输入 N 代表没有:n"; cin >> answer; if(answer == 'Y') m += 4; system("cls"); cout << "你生日的那一月有在这几个数字里吗?n"; cout << "8 9 10n11 12n输入 Y 代表有,输入 N 代表没有:n"; cin >> answer; if(answer == 'Y') m += 8; system("cls"); cout << "继续回答问题:n"; cout << "你生日的那一天有在这几个数字里吗?n"; cout << " 1 3 5 7n 9 11 13 15n17 19 21 23n25 27 29 31n输入 Y 代表有,输入 N 代表没有:n"; cin >> answer; if(answer == 'Y') b += 1; system("cls"); cout << "你生日的那天有在这几个数字里吗?n"; cout << " 2 3 6 7n10 11 14 15n18 19 22 23n26 27 30 31n输入 Y 代表有,输入 N 代表没有:n"; cin >> answer; if(answer == 'Y') b += 2; system("cls"); cout << "你生日的那天有在这几个数字里吗?n"; cout << " 4 5 6 7n12 13 14 15n20 21 22 23n28 29 30 31n输入 Y 代表有,输入 N 代表没有:n"; cin >> answer; if(answer == 'Y') b += 4; system("cls"); cout << "你生日的那天有在这几个数字里吗?n"; cout << " 8 9 10 11n12 13 14 15n24 25 26 27n28 29 30 31n输入 Y 代表有,输入 N 代表没有:n"; cin >> answer; if(answer == 'Y') b += 8; system("cls"); cout << "你生日的那天有在这几个数字里吗?n"; cout << "16 17 18 19n20 21 22 23n24 25 26 27n28 29 30 31n输入 Y 代表有,输入 N 代表没有:n"; cin >> answer; if(answer == 'Y') b += 16; system("cls"); cout << "你生日的在 " << m << " 月 "<< b << " 日!"; return 0; }
这个游戏巧妙地利用了二进制的性质,十分的奇妙,感谢阅读!
最后
以上就是神勇大米最近收集整理的关于c++ 巧妙利用二进制,猜出你的生日 猜生日游戏的全部内容,更多相关c++内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复