当前位置: 首页 > news >正文

C++第二十三课:猜数字游戏等练习

好的!这里为每道题目都生成了完整的练习题目,包含题目要求、输入输出示例和提示。

题目

📝 题目1:猜字母游戏

题目要求

编写一个猜字母游戏程序,要求:

  1. 电脑随机生成一个A-Z的大写字母
  2. 玩家有5次猜测机会
  3. 每次猜测后,提示字母在字母表中的相对位置(之前/之后)
  4. 猜对或机会用完时显示结果

输入输出示例

猜一个A-Z的字母(5次机会):M
字母在 M 之后,重新猜:S  
字母在 S 之前,重新猜:P
字母在 P 之前,重新猜:N
正确!字母是 N

提示

  • 使用 char target = 'A' + rand() % 26 生成随机字母
  • toupper() 函数将输入转为大写
  • 通过比较ASCII码值判断位置关系

📝 题目2:猜颜色游戏

题目要求

编写一个猜颜色游戏程序,要求:

  1. 从预定义颜色列表【红色, 蓝色, 绿色, 黄色, 紫色】中随机选择
  2. 玩家有4次猜测机会
  3. 每次猜测后,提示颜色在列表中的相对位置(较前/较后)或是否在列表中
  4. 显示可选颜色列表

输入输出示例

可选颜色:红色 蓝色 绿色 黄色 紫色 
猜一个颜色(4次机会):蓝色
颜色在列表中较前位置,重新猜:绿色
颜色在列表中较后位置,重新猜:黄色
🎉 正确!颜色是 黄色

提示

  • 使用 vector<string> 存储颜色列表
  • 遍历vector查找颜色位置
  • 比较目标索引和猜测索引

📝 题目3:猜单词游戏(两阶段)

题目要求

编写一个两阶段猜单词游戏:
第一阶段:猜单词长度(3次机会)

  • 提示"单词更长"或"单词更短"

第二阶段:猜单词本身

  • 只有长度猜对才能进入此阶段

单词库:[“苹果”, “香蕉”, “计算机”, “编程”, “学习”]

输入输出示例

第一关:猜单词的长度:3
单词更长,重新猜长度:5
单词更短,重新猜长度:4
长度正确!现在猜单词是什么:学习
🎉 完全正确!单词是 学习

提示

  • 使用 string.length() 获取单词长度
  • 分两个阶段处理输入
  • 注意长度猜测的机会限制

📝 题目4:网格位置猜谜

题目要求

编写一个网格位置猜谜游戏:

  1. 在3×3网格中随机生成目标位置(1-9)
  2. 玩家有3次猜测机会
  3. 每次猜测后,提示目标相对于猜测位置的方向(上方/下方/左侧/右侧)
  4. 显示网格位置图

输入输出示例

网格位置图:
1 2 3
4 5 6
7 8 9
猜目标在哪个位置(1-9,3次机会):5
提示:下方且右侧,重新猜:8
提示:上方,重新猜:7
🎯 命中目标!位置 7

提示

  • 使用 (位置-1)/3 计算行号,(位置-1)%3 计算列号
  • 通过行列差值判断方向
  • 注意组合方向的提示(如"下方且右侧")

📝 题目5:数字属性猜谜

题目要求

编写一个通过属性提示猜数字的游戏:

  1. 生成1-100的随机数
  2. 玩家有6次猜测机会
  3. 每次猜测后,提供三个属性提示:
    • 奇偶性(奇数/偶数)
    • 数字位数(一位数/两位数/三位数)
    • 十位数比较(更大/更小/相同)
  4. 根据属性提示逐步缩小范围

输入输出示例

猜一个1-100的数字(通过属性提示):50
属性提示:偶数,两位数,十位数相同,继续猜:55
属性提示:奇数,两位数,十位数相同,继续猜:52
🎉 完美猜中!数字是 52

提示

  • 使用 % 2 判断奇偶性
  • 通过数值范围判断位数
  • 使用 / 10 获取十位数进行比较

🎓 知识点考察

题目考察知识点
猜字母字符处理、ASCII码、循环控制
猜颜色数组/vector、字符串比较、遍历查找
猜单词字符串操作、多阶段逻辑、条件判断
网格位置数学计算、二维坐标、方向判断
数字属性数值运算、属性判断、多重条件

答案

🟢 简单题

题目1:猜字母游戏

#include <iostream>    // 用于输入输出
#include <cstdlib>     // 用于随机数函数
#include <ctime>       // 用于时间函数
using namespace std;   // 使用标准命名空间int main() {// 设置随机数种子,确保每次运行结果不同srand(time(0));// 生成A-Z的随机字母// 'A'的ASCII码是65,26个字母,所以rand() % 26得到0-25,加上'A'就是A-Zchar target = 'A' + rand() % 26;char guess;        // 存储玩家的猜测int count = 0;     // 记录猜测次数cout << "猜一个A-Z的字母(5次机会):";// 主游戏循环,最多5次机会while (count < 5) {cin >> guess;           // 获取玩家输入guess = toupper(guess); // 将输入转为大写,方便比较count++;               // 猜测次数加1// 判断是否猜对if (guess == target) {cout << "正确!字母是 " << target << endl;break;  // 猜对了就退出循环} // 如果猜错了,给出提示else if (guess < target) {cout << "字母在 " << guess << " 之后";  // 按字母表顺序提示} else {cout << "字母在 " << guess << " 之前";}// 判断是否还有机会if (count < 5) {cout << ",重新猜:";} else {cout << endl << "游戏结束!字母是 " << target << endl;}}return 0;  // 程序正常结束
}

代码执行流程:

  1. 生成随机字母A-Z
  2. 循环接受玩家输入
  3. 比较输入与目标字母
  4. 给出"之前/之后"的提示
  5. 5次机会用完或猜对时结束

题目2:猜颜色游戏

#include <iostream>
#include <cstdlib>
#include <ctime>
#include <vector>    // 用于动态数组
#include <string>    // 用于字符串处理
using namespace std;int main() {srand(time(0));// 定义颜色列表vector<string> colors = {"红色", "蓝色", "绿色", "黄色", "紫色"};int targetIndex = rand() % colors.size();  // 随机选择颜色索引string target = colors[targetIndex];       // 目标颜色string guess;                              // 玩家猜测int count = 0;                             // 猜测次数// 显示可选颜色cout << "可选颜色:";for (const auto& color : colors) {cout << color << " ";}cout << endl << "猜一个颜色(4次机会):";while (count < 4) {cin >> guess;count++;// 检查是否猜对if (guess == target) {cout << "🎉 正确!颜色是 " << target << endl;break;} else {// 查找猜测颜色在列表中的位置int guessIndex = -1;  // -1表示未找到for (int i = 0; i < colors.size(); i++) {if (colors[i] == guess) {guessIndex = i;  // 记录找到的位置break;}}// 根据位置给出提示if (guessIndex == -1) {cout << "颜色不在列表中";  // 输入无效} else if (guessIndex < targetIndex) {cout << "颜色在列表中较前位置";  // 目标在猜测之后} else {cout << "颜色在列表中较后位置";  // 目标在猜测之前}}// 判断是否继续if (count < 4) {cout << ",重新猜:";} else {cout << endl << "游戏结束!颜色是 " << target << endl;}}return 0;
}

核心机制:

  • 使用vector存储颜色列表
  • 通过索引比较给出位置提示
  • 处理无效输入情况

🟡 中等题

题目3:猜单词长度+单词

#include <iostream>
#include <cstdlib>
#include <ctime>
#include <vector>
#include <string>
using namespace std;int main() {srand(time(0));// 单词库vector<string> words = {"苹果", "香蕉", "计算机", "编程", "学习"};int targetIndex = rand() % words.size();  // 随机选择单词string target = words[targetIndex];       // 目标单词int targetLength = target.length();       // 目标单词长度int guessLength, guessCount = 0;          // 长度猜测和计数string guessWord;                         // 单词猜测cout << "第一关:猜单词的长度:";cin >> guessLength;// 长度猜测阶段(3次机会)while (guessLength != targetLength && guessCount < 3) {if (guessLength < targetLength) {cout << "单词更长";      // 提示单词更长} else {cout << "单词更短";      // 提示单词更短}cout << ",重新猜长度:";cin >> guessLength;guessCount++;}// 根据长度猜测结果进入不同分支if (guessLength == targetLength) {cout << "长度正确!现在猜单词是什么:";cin >> guessWord;if (guessWord == target) {cout << "🎉 完全正确!单词是 " << target << endl;} else {cout << "单词猜错了,正确答案是 " << target << endl;}} else {cout << "长度猜测失败,单词是 " << target << endl;}return 0;
}

游戏特点:

  • 两阶段游戏:先猜长度,再猜单词
  • 长度猜测有独立的机会限制
  • 使用字符串的length()方法获取长度

题目4:位置猜谜游戏

#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;int main() {srand(time(0));int targetPos = rand() % 9 + 1;  // 生成1-9的随机位置// 显示网格cout << "网格位置图:" << endl;cout << "1 2 3" << endl;cout << "4 5 6" << endl;cout << "7 8 9" << endl;cout << "猜目标在哪个位置(1-9,3次机会):";int guess, count = 0;while (count < 3) {cin >> guess;count++;if (guess == targetPos) {cout << "🎯 命中目标!位置 " << targetPos << endl;break;} else {// 计算目标位置的行列坐标// 行号:(位置-1)/3,列号:(位置-1)%3int targetRow = (targetPos - 1) / 3;  // 0-2行int targetCol = (targetPos - 1) % 3;  // 0-2列int guessRow = (guess - 1) / 3;int guessCol = (guess - 1) % 3;// 计算行列差异int rowDiff = targetRow - guessRow;  // 正数表示目标在下方的行int colDiff = targetCol - guessCol;  // 正数表示目标在右侧的列cout << "提示:";// 行方向提示if (rowDiff > 0) {cout << "下方";      // 目标在猜测的下方} else if (rowDiff < 0) {cout << "上方";      // 目标在猜测的上方}// 列方向提示if (colDiff != 0) {if (rowDiff != 0) cout << "且";  // 如果行方向也有差异if (colDiff > 0) {cout << "右侧";  // 目标在猜测的右侧} else {cout << "左侧";  // 目标在猜测的左侧}}// 判断游戏是否继续if (count < 3) {cout << ",重新猜:";} else {cout << endl << "目标位置是 " << targetPos << endl;}}}return 0;
}

核心算法:

  • 将1-9的位置映射到3×3网格坐标
  • 通过行列差值计算方向提示
  • 使用整数除法和取模计算网格位置

题目5:猜数字属性

#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;int main() {srand(time(0));int target = rand() % 100 + 1;  // 1-100的随机数int guess, count = 0;cout << "猜一个1-100的数字(通过属性提示):" << endl;while (count < 6) {  // 6次机会cin >> guess;count++;if (guess == target) {cout << "🎉 完美猜中!数字是 " << target << endl;break;}cout << "属性提示:";// 提示1:奇偶性if (target % 2 == 0) {cout << "偶数";  // 能被2整除} else {cout << "奇数";  // 不能被2整除}// 提示2:数字位数if (target < 10) {cout << ",一位数";     // 1-9} else if (target < 100) {cout << ",两位数";     // 10-99} else {cout << ",三位数";     // 100}// 提示3:十位数比较int targetTen = target / 10;  // 十位数(整除10)int guessTen = guess / 10;if (targetTen > guessTen) {cout << ",十位数更大";  // 目标的十位数更大} else if (targetTen < guessTen) {cout << ",十位数更小";  // 目标的十位数更小} else {cout << ",十位数相同";  // 十位数一样}// 游戏状态判断if (count < 6) {cout << endl << "继续猜:";} else {cout << endl << "游戏结束!数字是 " << target << endl;}}return 0;
}

属性提示解析:

  • 奇偶性:使用取模运算 % 2
  • 位数判断:通过数值范围判断
  • 十位数比较:使用整数除法 / 10

综合题

在这里插入图片描述

//猜数字游戏
#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;int main()
{int input_num, rand_num, count = 0, min_ = 0, max_ = 100;cout << "---猜数字小游戏---" << endl;srand(time(0));rand_num = rand() % 101; // 生成0-100的随机数cout << "电脑随机生成了一个数,请猜一猜这个数(0-100):" << endl;min_ = 0;max_ = 100;while(count < 5){cin >> input_num;count++;// 检查输入是否在有效范围内if(input_num < min_ || input_num > max_) {cout << "请输入在" << min_ << "-" << max_ << "之间的数字:" << endl;count--; // 不计入有效尝试次数continue;}if(input_num == rand_num) {cout << "恭喜你,猜对了,电脑随机产生的数为:" << rand_num << endl;cout << "你总共猜了" << count << "次" << endl;break;}if(input_num > rand_num){max_ = input_num;cout << "你猜的数大了,范围在" << min_ << "-" << max_ << "之间";}else {min_ = input_num;cout << "你猜的数小了,范围在" << min_ << "-" << max_ << "之间";}if(count < 5){cout << ",请重新输入:";}else {cout << endl << "很遗憾,游戏失败,你的猜数字次数已经用完!" << endl;cout << "你总共猜了" << count << "次" << endl;cout << "电脑随机产生的数为:" << rand_num << endl;}}return 0;
}
http://www.dtcms.com/a/499271.html

相关文章:

  • 河南省建设厅网站中州杯企业网站推广怎么做
  • 【数论】最大公因数 (gcd) 与最小公倍数 (lcm)
  • rocky linux MariaDB安装过程
  • git的 Rebase
  • 第8篇 QT联合halcon12在vs2019搭建环境开发图像处理
  • 【小白笔记】最大交换 (Maximum Swap)问题
  • CentOS安装Node.js
  • 深入解析MCP:从基础配置到高级应用指南
  • 佛山网站建设服务wordpress 不能更换主题
  • Process Monitor 学习笔记(5.13):从 0 到 1 的排障剧本清单(可复用模板)
  • Fluent 重叠网格+UDF NACA0012翼型摆动气动仿真
  • 深圳网站建设 设计卓越迈wordpress一键采集文章
  • 理想汽车Java后台开发面试题及参考答案(下)
  • python|if判断语法对比
  • 全链路智能运维中的实时流处理架构与状态管理技术
  • 排序算法:详解快速排序
  • 安阳哪里做360网站科技感十足的网站
  • UV 紫外相机在半导体制造领域的应用
  • 突破亚微米光电子器件制造瓶颈!配体交换辅助打印技术实现全打印红外探测器
  • 可见光工业相机半导体制造领域中的应用
  • require和 import是两种不同的模块引入方式的区别
  • 半导体制造工艺基本认识 五 薄膜沉积
  • 矩阵及其应用
  • **发散创新:探索零信任网络下的安全编程实践**随着信息技术的飞速发展,网络安全问题日益凸显。传统的网络安全防护方式已难以
  • 网络营销方案毕业设计安卓手机性能优化软件
  • 建设企业网站价格建设银行北京市财满街分行网站
  • (Kotlin高级特性一)kotlin的扩展函数和属性在字节码层面是如何实现的
  • Spring Boot 3零基础教程,WEB 开发 静态资源默认配置 笔记27
  • 【论文精度-2】求解车辆路径问题的神经组合优化算法:综合展望(Yubin Xiao,2025)
  • 赣州哪里做网站域名注册备案