设计程序打印下列图形: 1 5,2 8,6,3 10,9,7,4 这种规律,设计一个算法实现

15 28 6 310 9 7 4
2024-12-14 04:10:29
推荐回答(1个)
回答1:

代码如下。你自己把它改为通用的子函数吧!
算法很简单:先搞定第一列,然后再搞定每一行的剩余元素。

#include
#include

int main(void)
{
int i, j;
int k; //存储修正值,即偏移量
int n = 20; //需要打印的行数,你可以修改测试本程序
int **a; //存储动态数组

a = (int **)malloc(n * sizeof(int *)); //分配动态数组
for(i = 0; i < n; i++)
{
a[i] = (int *)malloc(n * sizeof(int));
}

a[0][0] = 0;
for(i = 1, k = n; i < n; i++)
{
a[i][0] = a[i - 1][0] + (k--); //填充二维数组的第一列
}
for(i = 1; i < n; i++)
{
for(j = 1, k = 0; j <= i; j++)
{
a[i][j] = a[i][j - 1] - (n - i) - (k++); //填充二维数组的每一行的(斜三角部分的)剩余位置
}
}

for(i = 0; i < n; i++)
{
for(j = 0; j <= i; j++)
{
printf("%-4d", a[i][j] + 1); //注意:数组的初始化是以0开始的,这里以1开始输出
}
printf("\n");
}

for(i = 0; i < n; i++)
{
free(a[i]);
}
free(a);

return 0;
}