嵌套循环和模数
Nested loops and modulus c++
本文关键字:嵌套循环 更新时间:2023-10-16
我正在学习c++,我的程序有问题。如果n=11
:
*---------*
-*-------*-
--*-----*--
---*---*---
----*-*----
-----*-----
----*-*----
---*---*---
--*-----*--
-*-------*-
*---------*
这是我的代码,在n=5时可以正常工作,但对于更大的数字则不能:
#include <iostream>
using namespace std;
int main ()
{
int n;
cout << "Enter size (n x n): " << endl;
cin >> n;
for (int i=0;i<n;i++){
for (int j=0;j<n;j++){
if (i%n==j%n) cout << '*';
else if (i%(n-i)==j%(n-j)) cout << '*';
else cout << '-';
}
cout << endl;
}
return 0;
}
如果n=11
:
*---------*
-*----*--*-
--*-----*--
---*---*---
----*------
-----*-----
-*----*--*-
---*---*---
--*-----*--
-*----*--*-
*---------*
我看到我已经成功地编写了如何打印一个'*'诊断。但有些东西与另一个不起作用,这是倒退的。不幸的是,我无法解决这个问题,需要你的建议。我做错了什么?如何调试此类问题?
这个问题很容易调试。
看第一个错误的*
。它出现在与i=1
、j=6
的位置。对于n=11
,你的条件i%(n-i)==j%(n-j)
变成了1%(11-1) == 6%(11-6)
,这实际上是真的,因为表达式两边的计算结果都是1
。
这个表达式的背后是什么?为什么使用这种if
来确定单元格是否属于第二条对角线?试着写下应该印在第二条对角线上的每一对i, j
,你应该会注意到一个更简单的图案。
注:在表达式if (i%n==j%n)
中,您不必对n
取操作数模,因为它们都小于n
,所以它是多余的,可以简单地重写为if (i == j)
。
相关文章:
- 如何声明特征矩阵,然后通过嵌套循环初始化它
- 了解嵌套循环打印星号图案
- 无法掌握嵌套循环的写作技巧
- 在 c++ 中实现嵌套循环的更短方法吗?
- 从嵌套循环中的 std::list 中删除将返回访问冲突
- 毕达哥拉斯三重嵌套循环误解
- T(n) 表示嵌套循环
- 2 个嵌套循环的时间复杂度
- 嵌套循环背后的逻辑
- 使用 %s C++嵌套循环
- 嵌套循环和重复迭代器
- 如何在 c++ 下使用嵌套循环和正则表达式降低时间复杂度?
- C++在乘法图中放置随机值(嵌套循环)
- 如何使用 OpenMP 减少嵌套循环?
- 为什么使用 2 个嵌套循环 O(n^2) 复杂度来解决二和问题,当只改变循环计数器逻辑时运行得更快?
- 学习嵌套循环C++与示例混淆
- 如何在CUDA中嵌套循环
- std::vector上的嵌套循环
- 具有动态数组分配的OpenMP嵌套循环
- 两个嵌套循环的运行时间复杂性:二次型还是线性