You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何打印列间间隔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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 03:27:03