C 语言天罡三十六题 - 精英九题(2021-5-29)
该系列共分四篇:
- 基础九题 https://codebus.cn/yangw/36-tasks-g1
- 进阶九题 https://codebus.cn/yangw/36-tasks-g2
- 精英九题 https://codebus.cn/yangw/36-tasks-g3 (本篇)
- 封神九题 https://codebus.cn/yangw/36-tasks-g4
相关说明请参考基础九题。
精英九题
19. 天空星
任务:模拟 Windows XP 的屏保“变幻线”。
不了解 WinXP 屏保“变幻线”效果的同学,可以[点击这里下载屏保“变幻线”]。下载后解压,直接运行 ssmyst.scr 即可看到效果。
20. 天速星
任务:一堆反弹的小球(数量可增减)。
屏幕上随机出现 10 个颜色各异的小球,沿 45 度运动,碰到边界反弹。按键盘的 + 号,屏幕上增加一个随机运动且颜色随机的小球。按 - 号,屏幕上减少一个小球。
每增加一个小球,就为这个小球分配所需的存储空间;每减少一个小球,就释放对应的存储空间。
小球数量的下限为 0,上限不限(数量太多时运行会变慢)。
21. 天异星
任务:可视化排序。
生成 20 个高度随机、颜色随机的立柱,将其横向一排显示出来。
然后,将其按照从小到大的顺序后,显示出来。
再然后,实现可视化的排序过程,就是说,排序的每一个步骤,谁和谁比较,谁和谁交换,用动画显示出来,展示完整的排序过程。
22. 天杀星
任务:汉诺塔求解。
汉诺塔(Tower of Hanoi),又称河内塔,是一个源于印度的古老传说:在印度北部的贝拿勒斯圣庙里,一块黄铜板上插着三根宝石针。印度教的主神梵天在创造世界的时候,在其中一根针从下到上地穿好了由大到小的 64 片金片。不论白天黑夜,总有一个僧侣在按照下面的法则移动这些金片:一次只移动一片,不管在哪根针上,小片必须在大片上面。僧侣们预言,当所有的金片都从梵天穿好的那根针上移到另外一根针上时,世界就将在一声霹雳中消灭,而梵塔、庙宇和众生也都将同归于尽。
例如,4 层汉诺塔的求解步骤如下:
请写一个程序,动态演示 8 层汉诺塔的求解过程。
23. 天微星
任务:雪花。
画出下面这样的雪花图案:
这是分形学的一个经典图案:科赫雪花(Koch snowflake)。希望下面这个动画能给你一点启发:
24. 天究星
任务:读写 BMP 文件。
任意找一张 BMP 图片文件。然后,用文件读取的方式打开这个 .bmp 图片文件,一个字节一个字节的读取其内容,并将图片逐像素的画出来。
例如,第 0 个字节是'B',第 1 个字节是'M',第 2~5 个字节是文件大小……
注:
关于 BMP 图片的文件格式,请自行搜索。
为了简化程序,可以只考虑 24 位色、未压缩的 BMP 图片。
25. 天退星
任务:求解八皇后问题。
八皇后问题(Eight queens),由国际西洋棋棋手马克斯·贝瑟尔于 1848 年提出:在 8×8 格的国际象棋上摆放 8 个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。
请写一个程序,动态演示八皇后问题的求解过程。
26. 天寿星
任务:迷宫求解。
该任务包括两点要求:
(1) 创建一个随机的迷宫,要求该迷宫有且仅有一条从起点通往终点的路线,同时,任何位置都不存在环路。
(2) 自动求解从起点通往终点的路线。
27. 天剑星
任务:文本文件渲染器。
第一步要求:显示英文文本文件。
在磁盘上保存一个文本文件,内容为若干行的英文。用程序读取这个文档,并将其中的英文内容显示到屏幕上。
如果内容较长,无需考虑滚动条功能。
第二步要求:文本文件支持中文。
请自行了解 ANSI 编码、Unicode 编码(也叫 Utf-16,分大小端)、Utf-8 编码等常见编码格式,使你的程序能正确的读取不同编码的中文文本文件,并正确在屏幕上显示中文。
第三步要求:富文本格式支持。
前面两步的文本文件并没有实现丰富的格式,这一步,要加上格式描述,使文档可以显示丰富的格式。
例如:文本文件中的 abc<b>def</b>g,表示 def 为粗体,<h1>xxx</h1> 表示 1 号标题、<i>xxx</i> 表示斜体,<< 表示 <,>> 表示 > 等。
你也可以 \bxxx/b 表示粗体,还可以用【asd】表示粗体。格式描述自己定义,只要你的程序能按照你定义的格式正确显示即可。
注意:
- 格式定义要完整、没有歧义。例如,如果用 <b>xxx</b> 表示粗体,那么,如何表示 < 这个符号呢?当文档中含有 a<b 这样的内容,如何确保正确解析并显示?要在设计阶段就考虑清楚。
- 格式定义要允许嵌套。例如:<b>xxx<i>xxx</i>xxx</b> 表示粗体里面若干内容在粗体的基础上增加了斜体样式。
3. 如果文档比较长,暂时可以不考虑滚动条的实现。
添加评论
取消回复