c语言生日代码大全可复制(C有趣程序做简单五次判断猜出你的生日在哪一天)

今天来写一个十分有趣的C 程序,通过五次输入,得出你的生日日期是哪一天。

废话不说,先放代码,看看结果,稍后解释原理:

/**

* 运行程序,做5次选择,就能知道你的生日是哪一天。

*/

#include <iostream>

using namespace std;

int main()

{

int date = 0;

char answer;

cout << "Is your birth date in this set ?" << endl;

cout << "16 17 18 19 " <<

"20 21 22 23 " <<

"24 25 26 27 " <<

"28 29 30 31" << endl;

cout << "Enter N for No and Y for Yes: ";

cin >> answer;

if (answer == Y)

date = 16;

28号没错

那么,这一堆数字的原理是什么呢?

简单分析一下:

一个月最多31天,

而 2^5-1 = 31 = 11111(二进制)

所以5个0和1的组合(二进制)可以表示一个月的每一天。

接下来就可以用每组数来排除各种可能性。

比如说你在第一组数时回答否,

那么说明你的生日的二年制表示时的最高位不为1

其他组依次类推就能得出结果了

比如,我们来看第一组数(为了方便大家,我把1到31的二进制数也打出来了,大家可以对照着看):

c语言生日代码大全可复制(C有趣程序做简单五次判断猜出你的生日在哪一天)(1)

第一组数

显然,第一组数的二进制最高位都是1。如果你回答Y,就可以确定你的生日那天的二进制最高位为1,也就是一定大于16,所以用下面这两句代码记录,确定日期大于16:

if (answer == Y)

date = 16;

再看第二组数:

c语言生日代码大全可复制(C有趣程序做简单五次判断猜出你的生日在哪一天)(2)

第二组数

第二组数的二进制里,第二位也全是1,相应地有:

if (answer == Y)

date = 8;

同样的道理,第三组数的二进制中,第三位数全是1,相应地有:

if (answer == Y)

date = 4;

第四组数二进制中,第四位全是1,相应地有:

if (answer == Y)

date = 2;

第五组数,二进制中第五位全是1,相应地有:

if (answer == Y)

date = 1;

因此,由上面的五步,

就一定能判断出你的生日是某个月的哪一天。

是不是很神奇?

好啦,

大家还有什么不明白的地方可以评论区讨论哟~

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。