一段有趣的C++代码,五次选择猜出你的生日

通过五组数字提问,利用二进制原理确定用户的生日日期。每组选择排除部分可能,最终得出确切日期。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

程序代码: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
其他组依次类推就能得出结果了
<think>嗯,用户让我介绍如何写一段C++代码,我需要先理解他们的需求。他们可能刚开始学编程,或者需要具体的例子。首先,我应该考虑他们想要什么样的代码示例。可能是一个简单的入门程序,比如“Hello World”,或者更复杂一点的,比如计算斐波那契数列之类的。 根据用户的请求历史,他们可能希望代码结构清晰,有注释,并且符合最佳实践。另外,用户提到了系统级指令,要求数学公式用$...$和$$...$$格式,但这里的问题是关于C++代码,可能不需要数学公式,不过还是要注意格式要求。比如,如果有变量或方程在解释中出现,需要用正确的LaTeX格式。 接下来,我需要确保回答结构清晰,分步骤讲解。比如,先写一个简单的例子,然后逐行解释代码的作用。同时,要使用中文,避免专业术语过于复杂,让初学者也能理解。 可能用户需要的是一个基础的示例,比如输出“Hello World”,然后计算两数之和,这样涵盖输入输出和基本运算。这样的例子能帮助用户理解基本语法和程序结构。 还要注意代码的正确性,比如头文件的使用,using namespace std; 的利弊,但作为入门示例,可以简化,直接使用using namespace std; 避免混淆。然后解释每个部分的作用,比如#include、main函数、cout、cin、变量声明等。 另外,用户可能希望了解如何编译和运行代码,所以可以加上简要的步骤,比如使用g++编译的命令。同时,指出代码中的关键点,比如返回0表示正常退出,输入输出的顺序等。 最后,确保整个回答符合用户的要求:结构清晰,步骤详细,正确可靠,并且用中文。避免使用Markdown格式,但这里用户要求的是思考过程,所以可以自然一点,不需要严格的结构,但最终回答要符合格式。</think>我将为您展示一段包含输入输出、条件判断和循环结构的C++代码示例,并逐步解释其实现原理: 示例:数字小游戏 ```cpp #include <iostream> #include <cstdlib> #include <ctime> int main() { // 初始化随机数种子 srand(time(0)); // 生成1-100的随机数 int secretNumber = rand() % 100 + 1; int guess, attempts = 0; std::cout << "欢迎来到数字游戏!\n"; std::cout << "请输入1-100之间的整数:\n"; do { std::cin >> guess; attempts++; if (guess > secretNumber) { std::cout << "大了!请再试一次:"; } else if (guess < secretNumber) { std::cout << "小了!请再试一次:"; } else { std::cout << "恭喜!你在" << attempts << "次尝试后对了!\n"; } } while (guess != secretNumber); return 0; } ``` 代码结构解析: 1. 头文件包含 - `<iostream>`:输入输出流库 - `<cstdlib>`:包含rand()和srand()函数 - `<ctime>`:获取时间作为随机种子 2. 随机数生成 - `srand(time(0))`:用当前时间初始化随机数生成器 - `rand() % 100 + 1`:生成1-100的随机整数 3. 游戏逻辑 - 使用do-while循环确保至少执行一次测 - 通过if-else条件判断比较输入值与目标值 - 使用attempts变量记录尝试次数 4. 输入输出 - `std::cin`获取用户输入 - `std::cout`输出提示信息 编译运行步骤: 1. 保存为guess_number.cpp 2. 终端执行:g++ guess_number.cpp -o guess 3. 运行:./guess 关键学习点: - 变量声明与初始化 - 流程控制(循环+条件判断) - 随机数生成原理 - 基本的输入输出操作 - 程序结构组织 该代码演示了C++的基本语法要素,适合作为学习: - 基本数据类型操作 - 控制结构应用 - 简单算法实现 - 交互式程序设计
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值