一段有趣的C++代码,五次选择猜出你的生日
2017-02-01 22:25
330 查看
程序代码:GuessBirthDate.cpp
/** * 运行程序,做5次选择,就能知道你的生日是哪一天。 */ #include <iostream> using namespace std; int main() { int date = 0; // Date to be determind char answer; // Prompt the user for Set 1 cout << "Is your birth date in this set ?" << endl; cout << "16 17 18 19\n" << "20 21 22 23\n" << "24 25 26 27\n" << "28 29 30 31" << endl; cout << "Enter N for No and Y for Yes: "; cin >> answer; if (answer == 'Y') date += 16; // Prompt the user for Set 2 cout << "Is your birth date in this set ?" << endl; cout << " 8 9 10 11\n" << "12 13 14 15\n" << "24 25 26 27\n" << "28 29 30 31" << endl; cout << "Enter N for No and Y for Yes: "; cin >> answer; if (answer == 'Y') date += 8; // Prompt the user for Set 3 cout << "Is your birth date in this set ?" << endl; cout << " 1 3 5 7\n" << " 9 11 13 15\n" << "17 19 21 23\n" << "25 27 29 31" << endl; cout << "Enter N for No and Y for Yes: "; cin >> answer; if (answer == 'Y') date += 1; // Prompt the user for Set 4 cout << "Is your birth date in this set ?" << endl; cout << " 2 3 6 7\n" << "10 11 14 15\n" << "18 19 22 23\n" << "26 27 30 31" << endl; cout << "Enter N for No and Y for Yes: "; cin >> answer; if (answer == 'Y') date += 2; // Prompt the user for Set 5 cout << "Is your birth date in this set ?" << endl; cout << " 4 5 6 7\n" << "12 13 14 15\n" << "20 21 22 23\n" << "28 29 30 31" << endl; cout << "Enter N for No and Y for Yes: "; cin >> answer; if (answer == 'Y') date += 4; cout << "Your birth date is " << date << endl; return 0; }
运行结果:
Is your birth date in Set1? 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Enter N for No and Y for Yes: N Is your birth date in Set2? 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31 Enter N for No and Y for Yes: Y Is your birth date in Set3? 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 Enter N for No and Y for Yes: Y Is your birth date in Set4? 2 3 6 7 10 11 14 15 18 19 22 23 26 27 30 31 Enter N for No and Y for Yes: Y Is your birth date in Set5? 4 5 6 7 12 13 14 15 20 21 22 23 28 29 30 31 Enter N for No and Y for Yes: N Your birth date is 11 Press any key to continue
简单分析一下:
一个月最多31天,
而 2^5-1
= 31 = 11111(二进制)
所以5个0/1的组合(二进制)可以表示一个月的每一天。
接下来就可以用每组数来排除各种可能性。
比如说你在第一组数时回答否,
那么说明你的生日的二年制表示时的最高位不为1
其他组依次类推就能得出结果了
相关文章推荐
- 一段有趣的C++代码 -C++和JAVA其实是一样的
- 《C++ primer》学习笔记之十三:一段很好看的c++代码,由此得出的编程风格
- 一段选择最快服务器的代码
- 一段合并多个有序数组并且升序输出数组元素的C++代码
- 用一段代码实现一个链表倒序(C++实现)
- 分享一段有趣的评论统计信息代码
- 一段实现选择框javascript代码的重构
- 一段很有趣的代码
- C++:一段代码(2007-05-08 21:32:36)
- 有关C++内部类的一段有趣代码
- 一段c++代码小例子
- 非常不错的一段C++代码
- 一段C++代码,可能颠覆你已有的概念
- 一段清屏的c++代码(转贴)
- 一段有趣的js代码,让你对js的运行加载有深刻的理解
- 一段有趣又实用的控制台工具代码
- 一段使用C++的奇怪代码
- 一段用来清除C++/C代码中空白行的perl脚本
- 一段C++练习代码小评(1)
- 一段代码讲述C++继承、多态、友元、静态变量、重载