C++ 小游戏:拍桌子

一、游戏规则与核心问题

(一)游戏规则

从 1 到 100 依次报数,在报数过程中,若遇到以下两种情况,则不能报出该数字,而是需要输出 "拍桌子":

  1. 所报的数是 7 的倍数(如 7、14、21 等);
  1. 所报的数中包含数字 7(如 7、17、27、70、71 等)。

(二)核心问题

计算在 1 到 100 这一报数范围内,一共需要 " 拍桌子 " 的次数。

二、代码整体结构解析

该 C++ 程序通过 循环遍历 1 到 100 的所有数字,利用 条件判断 筛选出需要 " 拍桌子 " 的数字,最后通过 计数器 统计总次数,整体结构清晰,符合基础 C++ 程序的逻辑框架,具体结构如下:

  1. 头文件引入:引入标准输入输出流头文件 <iostream>,为程序提供输入输出功能;
  2. 命名空间声明:使用 using namespace std;,避免在使用标准库函数 / 对象时重复书写 std; 前缀;
  3. 主函数 main():程序的入口,包含变量定义、循环、条件判断、结果输出等核心逻辑;
  4. 系统暂停与返回值:通过 system("pause") 让程序运行结束后停留,便于查看结果;return 0 表示程序正常结束。

三、核心代码逐段分析

(一)变量定义:计数器初始化

cpp 复制代码
int count = 0;
  • 功能:定义整型变量 count 并初始化为 0,用于统计 "拍桌子" 的总次数;
  • 关键说明:计数器必须初始化为 0,若未初始化,变量会被分配随机值,导致最终统计结果错误。

(二)循环结构:遍历 1~100 的数字

cpp 复制代码
for (int i = 1 ; i <= 100 ; i++)
  • 循环三要素:
  1. 初始化:int i = 1,定义循环变量 i 并从 1 开始(对应报数的起始值);
  2. 循环条件:i <= 100,确保循环只遍历到 100(对应报数的结束值);
  3. 迭代操作:i++,每次循环后 i 自增 1,实现依次报数的逻辑。
  • 作用:通过循环逐个检查 1 到 100 的每个数字,判断是否需要 "拍桌子"。

(三)条件判断:筛选 "拍桌子" 的数字

cpp 复制代码
if (i % 7 == 0 || i / 10 == 7 || i % 10 == 7 )
{
    //cout << "拍桌子" << endl;
    count++;
}
else
{
    //cout << i << endl;
}
  • 条件分析(使用逻辑运算符 || 表示 "或",满足任意一个条件即触发 "拍桌子"):
  1. i % 7 == 0:判断 i 是否为 7 的倍数(% 是取余运算符,若余数为 0,则为倍数);
  2. i / 10 == 7:判断 i 的十位数字是否为 7(/ 是整数除法,如 75 / 10 = 7,可提取十位数字);
  3. i % 10 == 7:判断 i 的个位数字是否为 7(如 27 % 10 = 7,可提取个位数字)。
  • 分支逻辑:
    • 满足条件:执行 count++,计数器自增 1(统计次数);注释掉的 cout << "拍桌子" << endl; 若取消注释,可实时输出每次 " 拍桌子 " 的操作;
    • 不满足条件:执行 else 分支,注释掉的 cout << i << endl; 若取消注释,可实时输出正常报出的数字。

(四)结果输出:打印总次数

cpp 复制代码
cout << "一共拍了 " << count << " 次桌子" << endl;
  • 功能:通过 cout 输出最终统计的 "拍桌子" 总次数;
  • 输出格式:拼接字符串("一共拍了 ")、变量值(count)和换行符(endl),使结果清晰易读。

四、代码运行结果与验证

(一)预期运行结果

程序运行后,控制台会输出:一共拍了 30 次桌子(注:1~100 中,7 的倍数有 14 个,含数字 7 的数有 19 个,其中重复的数有 3 个,实际总次数为 14 + 19 - 3 = 30)。

(二)结果验证方法

可取消代码中的注释(//cout << "拍桌子" << endl; 和 //cout << i << endl;),重新编译运行程序,通过实时输出的 " 拍桌子 " 或数字,手动核对是否有遗漏或错误,验证计数器统计结果的准确性。

五、完整代码

cpp 复制代码
#include <iostream>
using namespace std;

int main()
{
	int count = 0;
	for (int i = 1 ; i <= 100 ; i++)
	{
		if (i % 7 == 0 || i / 10 == 7 || i % 10 == 7 )
		{
			//cout << "拍桌子" << endl;
			count++;
		}
		else
		{
			//cout << i << endl;
		}
	}
	cout << "一共拍了 " << count << " 次桌子" << endl;
	
	system ("pause");
	return 0;
}
相关推荐
j7~9 小时前
【C++ 标准项目】发布订阅消息队列 (篇七):项目创建与基础工具模块搭建
开发语言·c++·log4j·uuid·protobuf·helper工具·消息定义类型和交换机类型定义
小宋10219 小时前
OpenTelemetry GenAI可观测性实战:串起模型、工具、Token与错误
java·人工智能·算法·贪心算法
嫂子开门我是_我哥9 小时前
青少年抑郁、焦虑、失眠与自杀相关表现的症状联系:一篇网络分析论文所使用的算法深度解读
论文阅读·算法·论文笔记
喜欢打篮球的普通人9 小时前
MiniMind 学习笔记(二十二):数学 Cookbook——把概率空间、期望、似然一次讲明白
人工智能·笔记·学习
渊鱼L9 小时前
CAD随机颗粒插件2D V2.0 更新说明
算法
Lazionr9 小时前
unordered_map和unordered_set的使用
开发语言·c++·算法
行者全栈架构师9 小时前
从 55% 到 6%:一个快餐营养规划器的算法迭代实录
后端·算法·架构
进化中的刀盾兽9 小时前
从零实现 C++ Json-Rpc(九):从 TCP 字节流中拆出完整消息——MuduoBuffer 与 LVProtocol
c++·rpc
乐橙开放平台9 小时前
通道国标 ID 贴反会串店:海康大华宇视摄像头怎么用 GB28181 统一接入?
网络·笔记·物联网·自动化·音视频·智能家居
Laurie三省9 小时前
现场版却配上录音室版的歌词?聊聊我给开源 Mac 歌词软件写的多源打分算法
算法·macos·go