news 2026/5/2 14:38:58

从PAT水仙花数到猜数字游戏:用C语言玩转翁恺老师第四章的5个经典习题

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
从PAT水仙花数到猜数字游戏:用C语言玩转翁恺老师第四章的5个经典习题

从PAT水仙花数到猜数字游戏:用C语言玩转翁恺老师第四章的5个经典习题

学习编程最怕什么?枯燥的语法规则、冰冷的代码逻辑、重复的习题训练。但编程真的只能这样吗?让我们换个视角——把每一道编程题都当作一个有趣的游戏关卡,用C语言这把"钥匙"来解锁其中的乐趣。

1. 整数排列组合:数字魔方的解谜艺术

想象你手中有四个连续的数字积木,比如2、3、4、5。如何用它们搭建出所有可能的三位数城堡,且每个城堡的数字都不重复?这就像在玩一个数字版的魔方游戏。

#include <stdio.h> void printCombinations(int start) { int cnt = 0; for(int i = start; i < start+4; i++) { for(int j = start; j < start+4; j++) { for(int k = start; k < start+4; k++) { if(i != j && i != k && j != k) { printf("%d%d%d ", i, j, k); if(++cnt % 6 == 0) printf("\n"); } } } } }

提示:这个三重循环就像三个转动的魔方层,if条件确保每个数字位置都是独特的。

游戏化学习技巧

  • 把输出结果想象成解锁的成就列表
  • 尝试修改代码,让输出按不同顺序排列
  • 挑战自己:能否用递归实现同样功能?

2. 水仙花数:寻找数字界的"阿凡达"

水仙花数就像是数字世界中的特殊生物,它们具有一种神奇的自我镜像特性。一个N位数,其每位数字的N次幂之和等于它本身。比如153这个"水仙花精灵":1³ + 5³ + 3³ = 153。

#include <math.h> void findNarcissisticNumbers(int N) { int start = pow(10, N-1); int end = pow(10, N) - 1; for(int num = start; num <= end; num++) { int sum = 0, temp = num; while(temp > 0) { int digit = temp % 10; sum += pow(digit, N); temp /= 10; } if(sum == num) printf("%d\n", num); } }

探索发现

  • 3位水仙花数:153, 370, 371, 407
  • 4位水仙花数:1634, 8208, 9474
  • 5位水仙花数:54748, 92727, 93084

注意:随着位数增加,计算量会指数级增长,7位水仙花数只有4个,你能找到它们吗?

3. 九九乘法表:编程世界的第一个"沙盒"

打印九九乘法表就像在代码世界建造第一个属于自己的小花园。通过控制行列,你可以创造出各种形状的"植物排列"。

void printMultiplicationTable(int N) { for(int i = 1; i <= N; i++) { for(int j = 1; j <= i; j++) { printf("%d*%d=%-4d", j, i, j*i); } printf("\n"); } }

创意变形挑战

  • 上三角版乘法表(右对齐)
  • 钻石形状乘法表
  • 彩色终端输出(使用ANSI转义码)
变形类型关键代码改动难度
上三角调整内循环起始条件★★☆
钻石形结合空格和对称性★★★
彩色版添加\033[颜色代码★★☆

4. 素数狩猎:数学王国的寻宝游戏

在数字丛林中寻找素数,就像在探险地图上标记宝藏位置。设定搜索范围[M,N],统计其中的素数个数并求和。

int isPrime(int num) { if(num < 2) return 0; for(int i = 2; i*i <= num; i++) { if(num % i == 0) return 0; } return 1; } void countPrimes(int M, int N) { int count = 0, sum = 0; for(int i = M; i <= N; i++) { if(isPrime(i)) { count++; sum += i; } } printf("素数个数: %d\n总和: %d\n", count, sum); }

性能优化之路

  1. 基础版:检查2到num-1(效率最低)
  2. 优化版:检查2到√num(中等效率)
  3. 进阶版:埃拉托斯特尼筛法(最高效处理区间素数)

5. 猜数字游戏:编程世界的第一个互动冒险

让我们把传统的猜数字习题升级成一个真正的游戏体验。系统随机生成数字,玩家有N次机会猜测,根据猜测次数给出不同评价。

#include <stdlib.h> #include <time.h> void guessNumberGame() { srand(time(0)); int secret = rand() % 100 + 1; int maxGuesses, guess, attempts = 0; printf("设置最大猜测次数: "); scanf("%d", &maxGuesses); while(1) { printf("你的猜测(1-100): "); scanf("%d", &guess); attempts++; if(guess < 0) { printf("提前退出游戏\n"); break; } if(guess == secret) { if(attempts == 1) printf("Bingo! 一发命中!\n"); else if(attempts <= 3) printf("Lucky You! 运气不错!\n"); else if(attempts <= maxGuesses) printf("Good Guess! 终于猜对了\n"); break; } else if(guess < secret) { printf("Too small\n"); } else { printf("Too big\n"); } if(attempts >= maxGuesses) { printf("Game Over! 正确答案是%d\n", secret); break; } } }

游戏扩展创意

  • 添加难度级别(调整数字范围)
  • 实现高分记录系统
  • 添加"提示"功能(需消耗尝试次数)
  • 多人对战模式

6. 从习题到项目:构建你的C语言游乐场

现在,让我们把这些分散的"游戏关卡"整合成一个完整的编程游乐场。用户可以自由选择想玩的"游戏"。

void showMenu() { printf("\n=== C语言编程游乐场 ===\n"); printf("1. 数字排列组合\n"); printf("2. 水仙花数探索\n"); printf("3. 创意乘法表\n"); printf("4. 素数狩猎\n"); printf("5. 猜数字游戏\n"); printf("0. 退出\n"); printf("请选择: "); } int main() { int choice; do { showMenu(); scanf("%d", &choice); switch(choice) { case 1: { int start; printf("输入起始数字(1-6): "); scanf("%d", &start); printCombinations(start); break; } case 2: { int N; printf("输入位数(3-7): "); scanf("%d", &N); findNarcissisticNumbers(N); break; } // 其他case类似... case 5: guessNumberGame(); break; } } while(choice != 0); return 0; }

项目进阶方向

  • 添加文件存储功能,保存游戏记录
  • 实现图形界面版本(如使用EasyX)
  • 添加音效和更多视觉反馈
  • 开发网络对战功能
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/2 14:38:57

ARM SVE向量加载指令LD1H详解与应用优化

1. ARM SVE向量加载指令概述在现代处理器架构中&#xff0c;SIMD&#xff08;单指令多数据&#xff09;技术是提升计算性能的关键。作为ARMv8架构的可扩展向量扩展&#xff0c;SVE&#xff08;Scalable Vector Extension&#xff09;引入了一系列强大的向量操作指令&#xff0c…

作者头像 李华
网站建设 2026/5/2 14:36:26

别再对着说明书发愁了!HTC Vive保姆级安装避坑指南(含SteamVR设置)

HTC Vive终极安装指南&#xff1a;从开箱到畅玩的避坑全攻略 刚拿到HTC Vive时的兴奋感&#xff0c;很快就被一堆线缆、基站和配件冲淡了&#xff1f;别担心&#xff0c;这份指南将带你避开所有新手陷阱。不同于官方说明书的技术术语堆砌&#xff0c;这里是一位VR老玩家的实战…

作者头像 李华
网站建设 2026/5/2 14:36:26

终极指南:如何用applera1n轻松绕过iOS激活锁

终极指南&#xff1a;如何用applera1n轻松绕过iOS激活锁 【免费下载链接】applera1n icloud bypass for ios 15-16 项目地址: https://gitcode.com/gh_mirrors/ap/applera1n iOS激活锁绕过工具applera1n 是一款专为A9-A11芯片设备设计的开源解决方案&#xff0c;帮助用户…

作者头像 李华