C语言螺旋方阵

1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9

这种形式的螺旋方阵,下面的代码哪里写的有问题

#include <stdio.h>

#define MAXN 10
int a[MAXN][MAXN];

void main()
{
int i,j,k,m,n;
printf("请输入整数n:");
scanf("%d",&n);

m=0;k=1;
while(k<(n+1)/2)
{
for(i=k-1;;)
{
for(j=i;j<n-k;j++)
a[i][j]=m++;
}
for(j=n-k;;)
{
for(i=k-1;i<n-k;i++)
a[i][j]=m++;
}
for(i=n-k;;)
{
for(j=n-k;j>k-1;j--)
a[i][j]=m++;
}
for(j=k-1;;)
{
for(i=n-k;i>k-1;i--)
a[i][j]=m++;
}

k++;
}

for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%3d",a[i][j]);
printf("\n");
}
}

坦率地说,你这个题的算法很不好,所以查错很不容易,建议你改写一下。
用递归的算法来做把,思路会比较清晰。递归函数实现的功能就是:实现方阵外圈的数字填入,然后调用递归函数完成内一圈的数字填入,直到填完所有的圈。
每一圈的填入,你可以用一个循环来实现,也可以用4个独立的循环来实现。
具体代码自己来实现吧,看起来楼主也不是那种找人代写作业的学生。
另外,任何循环都要有结束循环的条件,否则就是死循环。而你这个没有。
温馨提示:内容为网友见解,仅供参考
第1个回答  2014-04-21
for(i=k-1;;)

for(j=n-k;;)

for(i=n-k;;)

for(j=k-1;;)

你的这种循环里面没有对条件做判断,变量取值也一直不变,压根就是死循环
这是我百度的,经过测试了你看下
#include <stdio.h>
void main()
{
int i = 0;
int j = 0;
int k = 0;
int data[20][20]={0};
int count = 0;
int N = 0;
printf("Input an integer N:\n");
scanf("%d",&N);

for(k = 0;k < N/2;k ++)
{
for(i = k;i < N-k;i++)
data[k][i] = ++count;
for(i = k+1;i < N -k;i++)
data[i][N-k-1] = ++count;
for(i = N-k-2;i > k; i--)
data[N-k-1][i] = ++count;
for(i = N-k-1;i > k;i --)
data[i][k] = ++count;
}
if(N % 2 != 0)
data[N/2][N/2] = N*N;
for(i = 0;i < N;i ++)
{
for(j = 0;j < N;j ++)
printf("%d\t",data[i][j]);
printf("\n");
}
}追问

我是想表达初始条件是这些,那应该怎么改呢?

追答

#include

#define MAXN 10
int a[MAXN][MAXN];

void main()
{
int i,j,k,m,n;
printf("请输入整数n:");
scanf("%d",&n);

m=0;k=0; //k
while(k k; i--)
a[n-k-1][i] = ++m;
for(i = n-k-1;i > k;i --)
a[i][k] = ++m;
k++;
}
if(n% 2 != 0)
a[n/2][n/2] = n*n;

for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%3d",a[i][j]);
printf("\n");
}
}

本回答被提问者采纳

C语言 螺旋方阵?
c=a[x][y]=1;while(c<n*n){while(y<n-1&&!a[x][y+1])a[x][++y]=++c;\/\/向右 while(x<n-1&&!a[x+1][y])a[++x][y]=++c;\/\/向下 while(y>0&&!a[x][y-1])a[x][--y]=++c;\/\/向左 while(x>0&&!a[x-1][y])a[--x][y]=++c;\/\/向上 } for(x=0;x...

c语言输出 1 2 3 4 12 13 14 5
螺旋方阵是指数字以顺时针方式依自然数顺序填写的一种矩阵。4阶螺旋方阵则是4行4列数字构成的螺旋方阵。如下图是一个7阶螺旋方阵,使用将数字増序方向分类的原理,很容易的将数字分成四类,图中用不同颜色表示,红色表示数字向右递增,蓝色表示向下递增,以此类推……利用这种原理,螺旋方阵就被转化成...

C语言数字螺旋方阵的形式
1、下面是一个5*5阶的螺旋方阵。编程打印出此形式的n*n(n<=15)阶的方阵(顺时针方向旋进),n由键盘输入。 ┌ 1 2 3 4 5 ┐ │ 16 17 18 19 6 │ │ 15 24 25 20 7 │ │ 14 23 22 21 8 │ └ 13 12 11 10 9 ┘ 2、例程:include <stdio.h>int ...

C语言中打印螺旋方阵如图,如何使起始数字为1?
\/\/算法可能和你不一样#include <stdio.h>#include <stdlib.h>int main() {int x=1,y=1;int m,n;printf("请输入二维数组的大小:");scanf("%d,%d",&n);n+=2;int **s;s=(int**)malloc(sizeof(int*)*n);int i;for(i=0;i<n;i++){*(s+i)=(int*)malloc(sizeof(int)*...

用C语言设计算法输出一个5*5阶的螺旋方阵
我在ACM上写了一个N*N阶螺旋阵的题,代码给你了,可能有点长。输入5即有结果。include <stdio.h> int main(){ int n,k,a[30][30]={0},x=0,y=0,w[5]={1,1,1,1,1};scanf("%d",&n);k=2;a[0][0]=1;while(k<=n*n){ if(w[1]&&(x>0&&a[x-1][y]==0)) { ...

C语言:用自然数生成“螺旋形”方阵。
include<stdio.h> void main(){ int num[40][40]={0};int i=0,j=0,start=1,n;scanf("%d",&n);while(1){ for(;j<n&&!num[i][j];j++)num[i][j]=start++;j--;i++;for(;i<n&&!num[i][j];i++)num[i][j]=start++;i--;j--;for(;j>=0&&!num[i][j];j-...

用c语言如何设计螺旋方阵
void main(){ int i = 0;int j = 0;int k = 0;int data[20][20]={0};int count = 0;int N = 0;printf("Input an integer N:\\n");scanf("%d",&N);for(k = 0;k < N\/2;k ++){ for(i = k;i < N-k;i++)data[k][i] = ++count;for(i = k+1;i < N -...

螺旋方阵C语言编程
void main( ){ int i,j,r,l,b,d,pl,N;int choose;do { system("cls");printf("\\t\\t***\\n");printf("\\t\\t*** 1. 阶数选择并打印 ***\\n");printf("\\t\\t*** 2. 退出 ***\\n");printf("\\t\\t***

c语言螺旋方阵
include<stdio.h>int main(void){ int mm, i = 0, j = 0, aa[15][15], num1 = 1, num3, num2; printf("Enter n(n<=15):"); scanf("%d", &mm); for (num2 = mm - 1; num2 > 0; num2--) { if(((mm-1)\/2==i)&&(mm%2!=0)) \/\/处理总列数为...

c语言编程题(螺旋方阵)
\/\/参数打印n*n的矩阵。欢迎加我qq,共同讨论,进步!\/\/qq:237263394 include<stdio.h> main(){ int array[6][6],t=0,m=0,r=0,c=0,s1=1,s2=5,s3=0,s4=5,i=1;while(s1!=4){ while(m<=s4){ array[t][m]=i;m++;i++;} s4--;m--;i--;while(t<=s2){ array[t][...

相似回答