分两个三角形来处理
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:若有不足,望指出
^_^感谢阅读^_^

京公网安备 11010502036488号