首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C 語言螺旋矩陣生成:邊界條件修正與對齊輸出

     編輯:程式設計綜合問答

原始碼問題

for (j = n+i-1; j >= i+1; j--) a[i][j] = k++; // 起始索引錯誤
printf("%d ", a[i][j]); // 無寬度,輸出擠在一起
  • 第四條邊 (向左) 起始列索引應為 n-i+1,而非 n+i-1,導致越界或重疊。
  • 輸出無格式控制,多位數對齊困難。

修正版核心邏輯 (以 4×4 為例)

for (i = 1; i <= n/2; i++) {
    // 向下:左欄
    for (j = i; j <= n-i; j++) a[j][i] = k++;
    // 向右:底行
    for (j = i; j <= n-i; j++) a[n-i+1][j] = k++;
    // 向上:右欄
    for (j = n-i+1; j >= i+1; j--) a[j][n-i+1] = k++;
    // 向左:頂行 (修正起始點)
    for (j = n-i+1; j >= i+1; j--) a[i][j] = k++;
}
// 輸出固定寬度
for (i = 1; i <= n; i++) {
    for (j = 1; j <= n; j++) printf("%2d ", a[i][j]);
    printf("\n");
}

執行結果 (n=4)

 1 12 11 10
 2 13 16  9
 3 14 15  8
 4  5  6  7

符合題目要求的順時針內捲螺旋。

通用化建議

  • 改用 0-based 索引 (a[0..n-1][0..n-1]) 符合 C 慣例,邊界條件更直觀。
  • 封裝為函數 void spiral(int n, int a[][MAX]),主程式只負責 I/O。
  • 支援奇數 n:中心單元單獨填入 k。

掌握「四邊界收縮」模式,可輕鬆擴展至任意 N×N 螺旋矩陣生成。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved