我写的是你可以通过输入
n,然后显示的是n*n的螺旋
数。最大输入10
#include<stdio.h>
void main()
{
int i,j,n,m,z,k,pint a[11][11]
scanf("%d",&n)
p=n
z=n*n
m=(n+1)/2
for(k=1k<=mk++,n--)
{
for(i=n,j=nj>=kj--)
a[i][j]=z--
for(i=n-1,j=j+1i>=ki--)
a[i][j]=z--
for(j=j+1,i=i+1j<=nj++)
a[i][j]=z--
for(j=j-1,i=i+1i<=n-1i++)
a[i][j]=z--
}
for(i=1i<=pi++)
{
for(j=1j<=pj++)
printf("%-4d",a[i][j])
printf("\n")
}
}
#include<stdio.h>#define N 6
int main(void)
{
int i=0,j=0,m=0,n=0,num=0
int a[N][N]
do
{
for(i=mi<N-mi++)
a[i][j]=++num
--i
if(num==N*N)break
for(j=m+1j<N-mj++)
a[i][j]=++num
j--
if(num==N*N)break
for(i=N-m-2i>=mi--)
a[i][j]=++num
i++
if(num==N*N)break
for(j=N-m-2j>mj--)
a[i][j]=++num
j++
if(num==N*N)break
++m
}while(num<N*N)
printf("\t\t%d行%d列螺旋矩阵\n\n",N,N)
for(i=0i<Ni++)
{
for(j=0j<Nj++)
printf("%6d",a[i][j])
printf("\n")
}
}
#include<stdio.h>#include<stdlib.h>
void main(){
int **a,i,j,x,y,n
printf("input the N:")
scanf("%d",&n)
a = (int**) malloc(sizeof(int*)*n)
for(i=0i<ni++)
a[i]=(int*)malloc(sizeof(int)*n)
for(i=0i<ni++)for(j=0j<nj++)
a[i][j]=0
for(i=1,j=1,x=0,y=0i<=n*ni++){
a[x][y]=i
switch (j) //j 为前进方向,0向右,1向下,2向左,3向上。
{
case 0:
if(y+1>n-1|| a[x][y+1]!=0) {j=3x--}
else y++
break
case 1:
if(x+1>n-1 || a[x+1][y]!=0){j=0y++}
else x++
break
case 2:
if(y-1<0 || a[x][y-1]!=0){j=1x++}
else y--
break
case 3:
if(x==0||a[x-1][y]!=0){j=2y--}
else x--
break
}
}
for(i=0i<ni++){
for(j=0j<nj++)
printf("%4d",a[i][j])
printf("\n")
free(a[i])
}
free(a)
system("pause")
}
编程思路:开始将n*n矩阵全置为0,从(0,0)开始向下遍历矩阵。(x,y)=i,若到达下边界或(x+1,y)已赋值(即(x+1,y)!=0),遍历方向变为向右;其他方向于此类似,直到i==n*n结束。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)