蛇形矩阵
求助:蛇形矩阵:
7 8 1
6 9 2
5 4 3
程序代码:
#include <stdio.h>
int main()
{
int a[23][19]={0};
int step[4][2]={{1,0},{0,1},{-1,0},{0,-1}};
int m,n;
int x=0,y=0;
int dir=0;
int t=0;
scanf("%d%d",&m,&n);
while(t<m*n)
{
a[x][y]=++t;
switch(dir)
{
case 0:
if(x+1==m || a[x+1][y])dir=1;
break;
case 1:
if(y+1==n || a[x][y+1])dir=2;
break;
case 2:
if(x-1<0 || a[x-1][y])dir=3;
break;
case 3:
if(y-1<0 || a[x][y-1])dir=0;
}
x+=step[dir][0];
y+=step[dir][1];
}
for(x=0;x<m;x++)
{
for(y=0;y<n;y++)
printf("%4d",a[x][y]);
printf("\n");
}
return 0;
}


程序代码: #include <stdio.h>
void right (int a);
void down(int a);
void left(int a);
void up(int a);
int a[30][30], i, j, k,l,n,m,x,y,o,p;
main()
{
while (scanf("%d%d", &n, &m) != EOF)
{
x = n;
y = m;//用以判断是否结束及输出
o = n;
p = m;//用以计算赋值个数
i = 1;//用以赋值
j =0 ;
k = 0;//二维数组下标
right(i);//从right开始即可
}
}
void right(int i)
{
if (i <= x * y)
{
for (l = 0; l < m; l++, k++, i++) a[j][k] = i;
m -= 2; //下次用right时赋值个数将减少两个
k -= 1; //循环结束后,k多加了一个1,减回来
j += 1; //下个被赋值的数为本次赋值的最后一个数的左边第一个
down(i); //之后函数的操作类似,就不注释了
}
else
for (i = 0; i < x; i++)
{
for (j = 0; j < y; j++)
{
printf("%2d", a[i][j]);
if (j != y - 1) printf(" ");
}
printf("\n");
}
}
void down(int i)
{
if (i <= x * y)
{
for (l = 0; l < n-1; l++, j++, i++) a[j][k] = i;
n -= 2;
j -= 1;
k -= 1;
left(i);
}
else
for (i = 0; i < x; i++)
{
for (j = 0; j < y; j++)
{
printf("%2d", a[i][j]);
if (j != y - 1) printf(" ");
}
printf("\n");
}
}
void left(int i)
{
if (i <= x * y)
{
for ( l = 0; l < p-1; l++, k--, i++) a[j][k] = i;
p -= 2;
k += 1;
j -= 1;
up(i);
}
else
for (i = 0; i < x; i++)
{
for (j = 0; j < y; j++)
{
printf("%2d", a[i][j]);
if (j != y - 1) printf(" ");
}
printf("\n");
}
}
void up(int i)
{
if (i <= x * y)
{
for ( l = 0; l < o-2; l++, j--, i++) a[j][k] = i;
o-= 2;
j += 1;
k += 1;
right(i);
}
else
for (i = 0; i < x; i++)
{
for (j = 0; j < y; j++)
{
printf("%2d", a[i][j]);
if (j != y - 1) printf(" ");
}
printf("\n");
}
}
程序代码:#include<stdio.h>
main()
{
int i,j,a[100][100],n,k;
printf("请输入列数n= ");
scanf("%d",&n);
k=1;
//输出上三角
for(i=1;i<=n;i++)
for(j=1;j<=i;j++)
{
if(i%2==0) a[i+1-j][j]=k;
else a[j][i+1-j]=k;
k++;
}
//输出下三角
for(i=n+1;i<2*n;i++)
for(j=1;j<=2*n-i;j++)
{
if(i%2==0) a[n+1-j][i-n+j]=k; //n+1在这里是定值了
else a[i-n+j][n+1-j]=k;
k++;
}
for(i=1;i<=n;i++)
{
printf("\n");
for(j=1;j<=n;j++)
printf("%4d",a[i][j]);
}
printf("\n");
}
