本人菜鸟,希望大神给一个螺旋输出的程序 急用
效果为:
13 14 15 16 17
12 3 4 5 18
11 2 1 6 19
↑ 10 9 8 7 20
.... 26 25 24 23 21
c语言数字螺旋形输出方法?
答案:2 悬赏:30
解决时间 2021-12-14 01:15
- 提问者网友:浪女天生ˇ性情薄
- 2021-12-13 13:48
最佳答案
- 二级知识专家网友:时光不老我们不分离
- 2021-12-13 14:54
//1.1.2.2.3.3.4.4.5.5.6.6.6
#include<stdio.h>
void fun(int **a,int &i,int &j,int leag,int t)//控制方向0:←;1:↑;2:→;3:↓
{
switch(leag)
{
case 0:
i=i;
j=j-1;
a[i][j]=t;
break;
case 1:
i=i-1;
j=j;
a[i][j]=t;
break;
case 2:
i=i;
j=j+1;
a[i][j]=t;
break;
case 3:
i=i+1;
j=j;
a[i][j]=t;
break;
}
}
void main()
{
int n;
printf("输入矩阵维度(奇数):");
scanf("%d",&n);//n为奇数
int **p=new int*[n];
int i,j,s,t=1;
for(i=0;i<n;i++)//建立动态二维数组
{
int *q=new int[n];
p[i]=q;
}
int *pp=new int[2*n-1];//建立一个动态数组
for(i=0;i<2*n-2;i+=2)
{
pp[i]=t;
pp[i+1]=t;
t++;
}
pp[i]=t-1;
t=1;
i=n/2;
j=n/2;
p[i][j]=t;
for(s=0;s<2*n-1;s++)
{
while(pp[s])
{
fun(p,i,j,s%4,++t);
pp[s]--;
}
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
printf("%d\t",p[i][j]);
}
printf("\n");
}
for(i=0;i<n;i++)//释放内存
delete[] p[i];
delete[] p;
delete[] pp;
}
#include<stdio.h>
void fun(int **a,int &i,int &j,int leag,int t)//控制方向0:←;1:↑;2:→;3:↓
{
switch(leag)
{
case 0:
i=i;
j=j-1;
a[i][j]=t;
break;
case 1:
i=i-1;
j=j;
a[i][j]=t;
break;
case 2:
i=i;
j=j+1;
a[i][j]=t;
break;
case 3:
i=i+1;
j=j;
a[i][j]=t;
break;
}
}
void main()
{
int n;
printf("输入矩阵维度(奇数):");
scanf("%d",&n);//n为奇数
int **p=new int*[n];
int i,j,s,t=1;
for(i=0;i<n;i++)//建立动态二维数组
{
int *q=new int[n];
p[i]=q;
}
int *pp=new int[2*n-1];//建立一个动态数组
for(i=0;i<2*n-2;i+=2)
{
pp[i]=t;
pp[i+1]=t;
t++;
}
pp[i]=t-1;
t=1;
i=n/2;
j=n/2;
p[i][j]=t;
for(s=0;s<2*n-1;s++)
{
while(pp[s])
{
fun(p,i,j,s%4,++t);
pp[s]--;
}
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
printf("%d\t",p[i][j]);
}
printf("\n");
}
for(i=0;i<n;i++)//释放内存
delete[] p[i];
delete[] p;
delete[] pp;
}
全部回答
- 1楼网友:怪咖小青年
- 2021-12-13 15:57
定义一个二维数组用25个数作比方 int a[5][5]
然后定义int x,y;用来控制数组a的下标
x=5/2;
y=5/2;
表示从最中间开始。
用一个for循环输入数据,然后判定下一个元素是否为0,如果是,则改变方向输出,不为0,持续输出。控制方向就用下标的加减
x+ 向下
x-向上
y+向右
y-向左
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯