生活
c语言生日代码大全可复制(C有趣程序做简单五次判断猜出你的生日在哪一天)
2023-05-18 19:14  浏览:25

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

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

#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 19n" <<

"20 21 22 23n" <<

"24 25 26 27n" <<

"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;

因此,由上面的五步,

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

是不是很神奇?

好啦,

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

,
发表评论
0评