c语言程序设置矩阵中数字以蛇形输出的问题
发布网友
发布时间:2022-04-27 11:30
我来回答
共2个回答
热心网友
时间:2023-09-15 05:46
//以前写得,按蛇形增长方向给每个位置赋值
#include <stdio.h>
#include <stdlib.h>
int *p = NULL; //当前位置
int *s = NULL; //开始位置
int n = 0;
int func(int num, int way)
{
if(num == n*n + 1) return 0;
*p = num;
switch(way) //四个方向, 下,斜上,右,斜下
{
case 0: //向下时 下一个位置在 p + n 处,如当前位置是a[1][0],下个位置应该是a[2][0], 中间相差n个数据
p = p + n;
if( (p -s )% n == 0)
way = 1; //下个方向要么是斜上,要么斜下,由当前是上三角还是下三角决定
else
way = 3;
break;
case 1:
p = p - n + 1;
if(p - s < n -1)
way = 2;
else if((p + 1 - s) % n == 0)
way = 0;
break;
case 2:
p = p + 1;
if((p - s) / n == n -1)
way = 1;
else
way = 3;
break;
case 3:
p = p + n -1;
if((p - s) / n == n - 1)
way = 2;
else if((p - s) % n == 0)
way = 0;
break;
}
return func(num+1, way);
}
void main()
{
printf("n = ");
scanf("%d", &n);
p = (int *)malloc(n * n * sizeof(int));
s = p;
func(1, 0);
p = s;
while(s - p < n*n)
{
printf("%2d ", *s);
if((++s - p) % n == 0)
printf("\n");
}
}
热心网友
时间:2023-09-15 05:46
int **array=NULL;
void main()
{
int n;
scanf("%d",&n);
array=(int**)malloc(n*sizeof(int*));
for(int i=0;i<n;i++)
{
array[i]=(int *)malloc(n*sizeof(int));
}
Testingval(n,n);
for(int i=0;i<n;i++)
{for(int j=0;j<n;j++)
printf("%d ",array[i][j]);
printf("\n");
}
free(array);
}
int Testingval(int a,int n)//a 表示n行中的第几个。。n表示是N界矩阵!
{ if(n==1)
{ array[0][0]==1;
array[n][n]=n*n;
}
else
Testingval(a-1,n);
if(a%2)
{ int i=1;
array[0][a-1]=array[0][a-2]+1;
array[n-1][n-a]=n*n+1-array[0][a];
while(i<a)
{
array[i][a-1-i]=array[i-1][a-i+1]+1;
array[n-1-i][n-a+i]=n*n+1-array[i][a-i];
i++;
}
}
else
{int i=1;
array[a-1][0]=array[a-2][0]+1;
array[n-a][n-1]=n*n+1-array[a-1][0];
while(i<a)
{
array[a-1-i][i]=array[a-i+1][i-1]+1;
array[n-a+i][n-1-i]=n*n+1-array[a-1-i][i];
i++;
}
}
}
}