c++ - 如何更好地理解嵌套循环?
问题描述
我的问题是我对嵌套循环的理解不足以回答这个问题。我应该使用嵌套的 for 循环来右对齐我在左对齐上所做的堆栈,但我不太清楚两个内部的条件。
正确答案:
Height = 8
.......#
......##
.....###
....####
...#####
..######
.#######
########
我的答案:
Height = 8
.......#
.......#......#
.......#......#.....#
.......#......#.....#....#
.......#......#.....#....#...#
.......#......#.....#....#...#..#
.......#......#.....#....#...#..#.#
.......#......#.....#....#...#..#.##
我玩过它,认真对待它,什么都没有。我做了 (k = 7, k > j, k--), (k = 0, k < n-1, k++), k < j+7,我画了桌子,我知道高度几乎一样作为空格的值,但在每一行上反转。我也知道哈希和空格的值应该等于用户输入的高度。
它应该从用户那里获取一个值,但我已经在一个单独的文件上处理它,值 n 是在没有程序其余部分的情况下简化和处理它的高度。
#include <stdio.h>
int main(void) {
int n = 8;
for (int i = 0; i < n; i++) {
for (int j = 0; j < i; j++) {
for(int k = 7; k > j; k--) {
printf(".");
}
printf("#");
}
printf("\n");
}
}
解决方案
其实很简单。写一个表格,每行有多少个空格,'#'
你需要打印:
n == 8
| output | line | num_spaces | num_signs |
| -------- | ---- | ---------- | --------- |
| .......# | 1 | 7 | 1 |
| ......## | 2 | 6 | 2 |
| .....### | 3 | 5 | 3 |
| ....#### | 4 | 4 | 4 |
| ...##### | 5 | 3 | 5 |
| ..###### | 6 | 2 | 6 |
| .####### | 7 | 1 | 7 |
| ######## | 8 | 0 | 8 |
因为line
你可以从0
或从1
或从开始n
,然后倒退。选择最简单的东西。您会看到,在您的示例中,从开始1
是最简单的。
现在对于每个line
我们需要确定有多少num_spaces
,然后num_signs
我们打印。他们应该依赖line
和依赖n
。
因为num_spaces
它n - line
和num_signs
它的line
所以代码应该是这样的:
// for each line
for (int line = 1; line <= n; ++line)
{
// print n - line spaces
// print line # characters
// print \n
}
使用循环,代码将如下所示:
// for each line
for (int line = 1; line <= n; ++line)
{
// print n - line spaces
for (int i = 0; i < n -line; ++i)
std::cout << ' ';
// print line # characters
for (int i = 0; i < line; ++i)
std::cout << '#';
std::cout << '\n';
}
std::cout.flush();
But that's actually not recommended. You can get rid of those inner loops. One good and easy way is to use strings:
// for each line
for (int line = 1; line <= n; ++line)
{
// print n - line spaces
std::cout << std::string(n - line, ' ');
// print line # characters
std::cout << std::string(line, '#');
std::cout << '\n';
}
std::cout.flush();
And you can go even one step further:
// for each line
for (int line = 1; line <= n; ++line)
{
// print n - line spaces and line # characters
std::cout << std::string(n - line, ' ') << std::string(line, '#') << '\n';
}
std::cout.flush();
推荐阅读
- publish - Azure DevOps 将 .NET 桌面应用程序部署到本地计算机
- javascript - SVG Object classList.add() 将类添加到元素但不链接回样式表
- python - 如何连续绘制两个矩阵的乘法?
- html - 如何显示图片使其看起来没有连接
- vue.js - vue.js - 使用 i18n 的弹出窗口中的多种语言
- android - 从 url 下载图像并保存到缓存
- javascript - 在本机反应中控制平移视图的速度
- reactjs - Nextjs没有编译所有tailwindcss类
- c# - Acumatica:无法从数据网格中清除 PropertyException
- c# - 从对象列表中选择一个随机对象