如何打印列间间隔r个空格的n阶矩阵(不得使用矩阵或数组)
问题分析
你的实现思路(逐行逐字符打印、不使用数组)是符合题目要求的,只是列位置和1的坐标计算逻辑存在误差:
- 两列间隔r个空格,说明每一列的占位总长度是
r+1(1位数字 + r位间隔),不是r - 第i行的1应该落在第i个列的位置,对应坐标为
i*(r+1)
修正后可运行代码
#include <stdio.h> int main() { int n; // 矩阵维度 int r; // 列之间的间隔空格数 printf("Enter n: "); scanf("%i", &n); printf("Enter the distance between columns in matrix: "); scanf("%i", &r); for (int i = 0; i < n; i++) { // 遍历每一行 for (int j = 0; j < (r + 1) * n; j++) { // 遍历每一列字符 if (j % (r + 1) == 0) { // 是数字位 if (j == i * (r + 1)) { printf("1"); } else { printf("0"); } } else { // 是间隔位 printf(" "); } } printf("\n"); } return 0; }
更优实现方案
可以不用逐字符判断,直接按列块输出,逻辑更简洁,执行效率更高:
#include <stdio.h> int main() { int n, r; printf("Enter n: "); scanf("%i", &n); printf("Enter the distance between columns in matrix: "); scanf("%i", &r); for (int i = 0; i < n; i++) { // 输出1前面的0和间隔 for (int k = 0; k < i; k++) { printf("0"); for (int s = 0; s < r; s++) printf(" "); } // 输出当前行的1 printf("1"); // 输出1后面的间隔和0 for (int k = i + 1; k < n; k++) { for (int s = 0; s < r; s++) printf(" "); printf("0"); } printf("\n"); } return 0; }
内容的提问来源于stack exchange,提问作者nocomment
相关产品推荐
相关产品推荐

