如何打印N×N方阵的对角线?请帮忙检查我的代码
问题排查与修正
嘿,我帮你找出代码里的问题啦,主要是两个判断条件写错了,导致没法输出预期的对角线图案:
第一个错误:主对角线的判断完全失效
你循环里的i是从1开始的(for (i = 1; i <= n; i++)),但判断主对角线的条件写成了i == 0——这根本不可能触发啊!毕竟i从1跑到n,永远不会等于0。正确的主对角线判断应该是**i == j**,因为行号和列号相等的位置就是主对角线呀。
第二个错误:反对角线的位置算错了
当i和j都从1开始计数时,反对角线上的位置满足i + j == n + 1,而不是你写的n - 1。举个例子,n=5的时候,反对角线的位置是(1,5)、(2,4)、(3,3)、(4,2)、(5,1),它们的和都是5+1=6,而不是5-1=4。原来的条件会让*出现在(1,3)、(2,2)、(3,1)这些完全不对的位置。
修正后的代码
我把这两个问题都改好了,你看看:
#include <iostream> using namespace std; int main() { int n, i, j; cin >> n; for (i = 1; i <= n; i++) { for (j = 1; j <= n; j++) { // 主对角线(行号=列号) 或者 反对角线(行号+列号 = n+1) if (i == j || i + j == n + 1) { cout << "*"; } else { cout << " "; } } cout << "\n"; } return 0; }
输入5时的输出效果
运行这个修正后的代码,输入5会得到你想要的对角线图案:
* * * * * * * * *
这样就完美符合N×N方阵的对角线(主对角线+反对角线)效果啦~
内容的提问来源于stack exchange,提问作者KrishJr
相关产品推荐
相关产品推荐

