第三十七天:2025 图形绘制
2025 图形绘制
一、问题
小蓝面临的挑战是绘制一个 (h×w) 的矩形图形。其中,(h) 决定了图形的高度,(w) 则掌控着图形的宽度。以 (h = 5),(w = 10) 为例,这个图形呈现出如下模样:
2025202520
0252025202
2520252025
5202520252
2025202520
仔细观察,我们便能发现其中的规律:第一行如同整齐排列的士兵,用 “2025” 重复填充。而从第二行起,仿佛是一场有序的位移,每行都向左移动一个字符,随后再以 “2025” 继续填充。这种规律既简单又蕴含着一种独特的美感,它激发着我们用代码将其完美呈现。
二、解题思路
-
输入部分:与用户的友好互动
程序首先需要倾听用户的需求,获取图形的高度 (h) 和宽度 (w)。在 C++ 的世界里,标准输入流cin
就像是一位贴心的信使,轻松实现了这一沟通。通过它,我们能够准确地捕捉到用户输入的信息,为后续的图形绘制奠定基础。 -
绘制图形部分:用循环编织图形的画卷
为了绘制出这个图形,我们巧妙地运用嵌套的for
循环。外层循环犹如一位指挥官,掌控着图形的行数,确保每一行都能有条不紊地绘制出来。而内层循环则像是一位勤劳的工匠,专注于每行的列数,精心雕琢每一个字符的位置。
对于每一行,我们巧妙地借助行号来确定从 “2025” 这个模式字符串的哪个字符开启输出之旅,以此实现每行向左移动一个字符的神奇效果。同时,通过对模式字符串长度取模的方式,如同给程序装上了一个精准的导航仪,无论索引如何增长,都能确保在模式字符串的有效范围内循环使用字符,从而完美地填充整行。
三、C++ 代码实现
#include <iostream>
#include <string>int main() {int h, w;std::cin >> h >> w;std::string pattern = "2025";for (int i = 0; i < h; ++i) {int index = i;for (int j = 0; j < w; ++j) {std::cout << pattern[index % 4];index++;}std::cout << std::endl;}return 0;
}
四、代码解读
-
变量定义与输入:信息的初始化与获取
int h, w;
这简单的一行,定义了两个至关重要的整数变量h
和w
,它们如同两把钥匙,分别掌管着图形的高度和宽度。std::cin >> h >> w;
借助cin
,程序能够与用户进行无缝对接,精准地获取到用户心中所想的图形尺寸。这一步是整个程序与外界交互的起点,它使得程序不再是孤立的存在,而是能够根据用户的需求灵活变化。
-
模式字符串与外层循环:构建图形的框架
std::string pattern = "2025";
这里定义的pattern
字符串,就像是图形绘制的蓝图,它明确了我们要重复使用的基本模式。- 外层
for
循环for (int i = 0; i < h; ++i)
则像是一个节拍器,以i
从0
开始,每次递增1
的节奏,控制着图形逐行绘制。当i
最终达到h
时,整个图形的框架便已初步搭建完成。
-
内层循环与字符输出:细节之处见真章
int index = i;
在每行绘制的起始点,我们将索引变量index
初始化为当前行号i
。这个小小的举动意义非凡,它为每行字符的输出设定了独特的起始位置,是实现每行向左移动一个字符效果的关键所在。- 内层
for
循环for (int j = 0; j < w; ++j)
则专注于每行的列数控制。随着j
从0
逐步递增到w
,每行所需的字符数量得以保证。 std::cout << pattern[index % 4];
在每次内层循环中,程序会输出模式字符串pattern
中索引为index % 4
的字符。这一操作巧妙地利用了取模运算,无论index
如何变化,都能确保输出的字符始终在模式字符串 “2025” 的范围内,实现了字符的循环使用。index++;
每次输出字符后,index
自增1
,这使得下一次循环能够输出模式字符串中的下一个字符,如同接力赛一般,有序地完成每行字符的绘制。
-
换行操作:塑造图形的完美形态
std::cout << std::endl;
当内层循环结束,也就是一行的所有字符绘制完毕后,这一简单的语句便发挥了关键作用。它输出一个换行符,如同给图形绘制工作按下了换行键,使得下一行的字符能够在新的一行开始绘制,从而塑造出矩形的完美形态。
五、拓展
-
调整模式字符串:尝试将模式字符串从"2025"改为"1357"或"ABCD"等不同组合,观察图形产生的变化。这种调整不仅能满足多样化的视觉需求,更有助于深入理解模式与图形之间的关联规律。
-
实现动态模式:改用程序动态生成模式字符串,替代固定的"2025"。可以根据用户输入或特定算法实时生成模式,从而创造出更加丰富多变的图形效果,显著提升程序的灵活性和趣味性。
-
应用图形变换:完成基础图形绘制后,可进行多种变形处理。例如旋转90度、180度,或执行对称操作等,通过这些变换可以衍生出全新的图形样式。这一过程既能提升编程技能,又能有效培养空间想象力和创新思维。