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; }
逻辑说明
- 数组初始化:直接用
i+1赋值即可,原代码的%10属于多余操作(若需处理n≥10的场景可保留,但需求中未提及)。 - 行输出逻辑:
- 对于第
i行(从0开始计数),起始索引设为(n - i) % n,确保每次循环都从正确的位置开始。 - 内层循环通过
(起始索引 + j) % n依次获取数组元素,保证循环遍历整个数组,不会越界。
- 对于第
当n=3时,输出结果为:
1 2 3 3 1 2 2 3 1
内容的提问来源于stack exchange,提问作者wsn
相关产品推荐
相关产品推荐

