分两个三角形来处理

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:若有不足,望指出

^_^感谢阅读^_^