用C语言设计算法输出一个5*5阶的螺旋方阵
答案:2 悬赏:50 手机版
解决时间 2021-11-12 17:50
- 提问者网友:斑駁影
- 2021-11-12 11:46
用C语言设计算法输出一个5*5阶的螺旋方阵
最佳答案
- 五星知识达人网友:爱难随人意
- 2021-11-12 12:51
我在ACM上写了一个N*N阶螺旋阵的题,
代码给你了,可能有点长。
输入5即有结果。
#include
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)) {
a[x-1][y]=k;
k++;
x--;
if(x>0&&a[x-1][y]==0)
w[1]=1,w[2]=0,w[3]=0,w[4]=0;
else w[1]=0,w[2]=1,w[3]=1,w[4]=1;
}
else if(w[2]&&(y a[x][y+1]=k;
k++;
y++;
if(y w[1]=0,w[2]=1,w[3]=0,w[4]=0;
else w[1]=1,w[2]=0,w[3]=1,w[4]=1;
}
else if(w[3]&&(x a[x+1][y]=k;
k++;
x++;
if(x w[1]=0,w[2]=0,w[3]=1,w[4]=0;
else w[1]=1,w[2]=1,w[3]=0,w[4]=1;
}
else if(w[4]&&(y>0&&a[x][y-1]==0)){
a[x][y-1]=k;
k++;
y--;
if(y>0&&a[x][y-1]==0)
w[1]=0,w[2]=0,w[3]=0,w[4]=1;
else w[1]=1,w[2]=1,w[3]=1,w[4]=0;
}
}
for(k=0;k int t=1;
for(x=0;x if(t){
if(n<=3) printf("%-d",a[k][x]);
else if(n<=9) printf("%-2d",a[k][x]);
else printf("%-3d",a[k][x]);
t=0;
}
else {
if(x==n-1) printf(" %-d",a[k][x]);
else {
if(n<=3) printf(" %-d",a[k][x]);
else if(n<=9) printf(" %-2d",a[k][x]);
else printf(" %-3d",a[k][x]);
}
}
}
printf("\n");
}
return 0;
}
代码给你了,可能有点长。
输入5即有结果。
#include
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)) {
a[x-1][y]=k;
k++;
x--;
if(x>0&&a[x-1][y]==0)
w[1]=1,w[2]=0,w[3]=0,w[4]=0;
else w[1]=0,w[2]=1,w[3]=1,w[4]=1;
}
else if(w[2]&&(y
k++;
y++;
if(y
else w[1]=1,w[2]=0,w[3]=1,w[4]=1;
}
else if(w[3]&&(x
k++;
x++;
if(x
else w[1]=1,w[2]=1,w[3]=0,w[4]=1;
}
else if(w[4]&&(y>0&&a[x][y-1]==0)){
a[x][y-1]=k;
k++;
y--;
if(y>0&&a[x][y-1]==0)
w[1]=0,w[2]=0,w[3]=0,w[4]=1;
else w[1]=1,w[2]=1,w[3]=1,w[4]=0;
}
}
for(k=0;k
for(x=0;x
if(n<=3) printf("%-d",a[k][x]);
else if(n<=9) printf("%-2d",a[k][x]);
else printf("%-3d",a[k][x]);
t=0;
}
else {
if(x==n-1) printf(" %-d",a[k][x]);
else {
if(n<=3) printf(" %-d",a[k][x]);
else if(n<=9) printf(" %-2d",a[k][x]);
else printf(" %-3d",a[k][x]);
}
}
}
printf("\n");
}
return 0;
}
全部回答
- 1楼网友:鱼芗
- 2021-11-12 13:49
我们刚做过这个题,这是我们老师给出的答案,我也亲自试过,输出结果是正确的,希望能帮到你!呵呵
#include
#define N 5
void main()
{
int arr[N][N]={0}; //建立N*N的二维数组
int i=0,j=0; //标记二维数组的下标
int key,k; //标记每次下标加减的次数
int num=1; //要放入数组的数 ;
key = N-1;
for(key=N-1; key>0; key -= 2)
{
for (k=0; k {
arr[i][j] = num;
++i;
++num;
}
for (k=0; k {
arr[i][j] = num;
++j;
++num;
}
for (k=0; k {
arr[i][j] = num;
--i;
++num;
}
for (k=0; k {
arr[i][j] = num;
--j;
++num;
}
++i; //调整下一个周期时数组的横纵坐标
++j;
}
if(0==key)
arr[i][j]=num;
for(i=0; i {
for(j=0; j printf("%3d",arr[i][j]);
printf("\n");
}
}
#include
#define N 5
void main()
{
int arr[N][N]={0}; //建立N*N的二维数组
int i=0,j=0; //标记二维数组的下标
int key,k; //标记每次下标加减的次数
int num=1; //要放入数组的数 ;
key = N-1;
for(key=N-1; key>0; key -= 2)
{
for (k=0; k
arr[i][j] = num;
++i;
++num;
}
for (k=0; k
arr[i][j] = num;
++j;
++num;
}
for (k=0; k
arr[i][j] = num;
--i;
++num;
}
for (k=0; k
arr[i][j] = num;
--j;
++num;
}
++i; //调整下一个周期时数组的横纵坐标
++j;
}
if(0==key)
arr[i][j]=num;
for(i=0; i
for(j=0; j
printf("\n");
}
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯