分两个三角形来处理
1、路线图
2、划分
3、代码
#include <stdio.h> int main() { int n = 0; scanf("%d", &n); int arr[n][n]; int i = 0; int j = 0; int k = 0; int num = 1;//将要赋给数组的值 int count = 1;//经历的斜着赋值的循环次数 arr[i][j] = num++;//第一次赋值 //先完成左上角的三角形 //count为n时,左上角的三角形已完成,跳出大循环 while (count != n) { for (j++; j >= 0; j--) { arr[i][j] = num++; i++; } if (++count == n) { break; } for (; i >= 0; i--) { j++; arr[i][j] = num++; } i++; count++; } //此时完成右下角的三角形 //判断n的奇偶,因为n的奇偶对下半部分的赋值路线有影响 if (n % 2 == 0)//n为偶数的情况 { j++; while (num <= n * n) { for (j++; j < n; j++) { i--; arr[i][j] = num++; } for (i++; i < n; i++) { j--; arr[i][j] = num++; } } } else//n为奇数的情况 { while (num <= n * n) { for (i++; i < n; i++) { arr[i][j] = num++; j--; } for (j += 2; j < n; j++) { i--; arr[i][j] = num++; } j--; } } //输出 for (i = 0; i < n; i++) { for (j = 0; j < n; j++) { printf("%d ", arr[i][j]); } printf("\n"); } return 0; }
ps:若有不足,望指出
^_^感谢阅读^_^