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

C语言数组循环移位实现问题:输出n行指定移位结果

数组循环移位问题修正

你的代码核心问题在于内层循环的索引计算逻辑错误,导致第一行输出顺序不符合预期。当n=3且i=0时,内层循环j从3到1递减,(i+j)%n的结果依次是0、2、1,对应数组元素1、3、2,和目标的1、2、3不符。

修正后的代码

#include <stdio.h>

int main() {
    int n; scanf("%d", &n);
    int lines[n]; 
    int i,j;
    
    // 初始化数组为1~n
    for(i=0;i<n;i++) {
        lines[i] = i + 1;
    }
    
    // 循环输出n行
    for(i=0;i<n;i++) {
        // 第i行从(n-i)%n的位置开始遍历数组
        for(j=0;j<n;j++) {
            int idx = (n - i + j) % n;
            printf("%d ", lines[idx]);
        }
        printf("\n");
    }
    return 0;
}

逻辑说明

  1. 数组初始化:直接用i+1赋值即可,原代码的%10属于多余操作(若需处理n≥10的场景可保留,但需求中未提及)。
  2. 行输出逻辑:
    • 对于第i行(从0开始计数),起始索引设为(n - i) % n,确保每次循环都从正确的位置开始。
    • 内层循环通过(起始索引 + j) % n依次获取数组元素,保证循环遍历整个数组,不会越界。

当n=3时,输出结果为:

1 2 3 
3 1 2 
2 3 1 

内容的提问来源于stack exchange,提问作者wsn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 14:32:16