请问下这是什么问题

ganwg07 2011-09-20 06:53:43
请问下这是什么问题, 解决思路是怎样的
1 2 9 10 25
4 3 8 11 24
5 6 7 12 23
16 15 14 13 22
17 18 19 20 21

...全文
266 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
小类人猿 2011-09-21
  • 打赏
  • 举报
回复
楼主这是我写的程序,可以帮你解决你的问题
#include"stdio.h"
//打印蛇形矩阵
#define MAX 30
int print(int n,int a[MAX][MAX])//用递归的方法
{
int i,j,m;
if(n==1)return a[0][0]=1;
else if(n%2==0)//偶数阶的最外面的数是顺时针的方向
{
m=(n-1)*(n-1)+1;
for(i=0;i<n;i++)
a[i][n-1]=m++;
for(j=n-2;j>=0;j--)
a[n-1][j]=m++;
return print(n-1,a);
}
else//奇数阶的最外面是逆时针的方向

{
m=(n-1)*(n-1)+1;
for(j=0;j<n;j++)
a[n-1][j]=m++;
for(i=n-2;i>=0;i--)
a[i][n-1]=m++;
return print(n-1,a);
}
}
main()
{
int a[MAX][MAX],i,j,m=1,n;
printf("请输入矩阵的阶数n:");
scanf("%d",&n);
print(n,a);
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
printf("%4d",a[i][j]);
m++;//m用来控制换行
if((m-1)%n==0)printf("\n");
}
}
baozi5201314 2011-09-21
  • 打赏
  • 举报
回复
楼主这是很明显的蛇形矩阵,只不过,貌似有点儿变形
小类人猿 2011-09-21
  • 打赏
  • 举报
回复
#include"stdio.h"
//打印蛇形矩阵
#define MAX 30
int print(int n,int a[MAX][MAX])//用递归的方法
{
int i,j,m;
if(n==1)return a[0][0]=1;
else if(n%2==0)//偶数阶的最外面的数是顺时针的方向
{
m=(n-1)*(n-1)+1;
for(i=0;i<n;i++)
a[i][n-1]=m++;
for(j=n-2;j>=0;j--)
a[n-1][j]=m++;
return print(n-1,a);
}
else//奇数阶的最外面是逆时针的方向

{
m=(n-1)*(n-1)+1;
for(j=0;j<n;j++)
a[n-1][j]=m++;
for(i=n-2;i>=0;i--)
a[i][n-1]=m++;
return print(n-1,a);
}
}
main()
{
int a[MAX][MAX],i,j,m=1,n;
printf("请输入矩阵的阶数n<50:");
scanf("%d",&n);
print(n,a);
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
printf("%4d",a[i][j]);
m++;
if((m-1)%n==0)printf("\n");
}
}
zhaopeng2511 2011-09-21
  • 打赏
  • 举报
回复
带图一张……
zhaopeng2511 2011-09-21
  • 打赏
  • 举报
回复
没说的……直接上代码……
#include<stdio.h>
#define MAX 25
int a[MAX][MAX]={0};
void snake_matrix(int n)
{
int i,j,k,m,r; //m为从1-n按顺序要存入数组的数,r是为了暂存数据用的
i=j=k=0; //i,j为控制数组a下标的,k:比如说k为偶数,则从a[k][0]开始把m存入,是奇数则从a[0][k]开始把m存入
for(k=0,m=1;k*k<n+1;k++)
{
if(k%2==0) //k为偶数
{
i=k;
j=0;
r=m;
while(m<=r+k&&m!=n+1) //从a[k][0]开始向右存入m
a[i][j++]=m++;
m--;
r=m;
j--;
while(m<=r+k&&m!=n+1) //从a[k][k]开始向上存入m
a[i--][j]=m++;
}
else
{
i=0;
j=k;
r=m;
while(m<=r+k&&m!=n+1) //从a[0][k]开始向下存入m
a[i++][j]=m++;
m--;
r=m;
i--;
while(m<=r+k&&m!=n+1) //从a[k][k]开始向左存入m
a[i][j--]=m++;
}
}
}
void print(int n) //打印输出
{
int i,j,k;
for(i=k=0;i<=MAX;i++)
{
for(j=0;j<=MAX;j++)
if(a[i][j]!=0) //如果是0不输出
printf("%-4d",a[i][j]);
else if((i+1)*(i+1)>n&&i*i<n) //如果最后一行前面有0,则用空格代替,比如输入98时,最后一行是0,0,99,98……
printf(" ");
else
break; //其它情况跳出循环
printf("\n");
if((i+1)*(i+1)>n) //如果最后一行输出完毕,就结束循环……
break;
}
}
void main()
{
int n;
printf("n:");
scanf("%d",&n); //输入蛇形矩阵的长度,为了正常显示,n应小于400
snake_matrix(n); //生成长度为n的蛇形矩阵
print(n); //输出生成蛇形矩阵
}
赵4老师 2011-09-21
  • 打赏
  • 举报
回复
初始值:1
初始位置:(x,y)=(0,0)
初始方向:上
按以下规则走一步,值+1,填写当前值,填到n*n时结束:
上遇到y==-1,y=0,x++;方向改为下
下遇到左边没填,方向改为左
左遇到x==-1,x=0,y++;方向改为右
右遇到上边没填,方向改为上
赵4老师 2011-09-21
  • 打赏
  • 举报
回复
//  1  2  9 10 25
// 4 3 8 11 24
// 5 6 7 12 23
// 16 15 14 13 22
// 17 18 19 20 21
cxpwangray 2011-09-21
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 wyhllk 的回复:]

楼主这是我写的程序,可以帮你解决你的问题
#include"stdio.h"
//打印蛇形矩阵
#define MAX 30
int print(int n,int a[MAX][MAX])//用递归的方法
{
int i,j,m;
if(n==1)return a[0][0]=1;
else if(n%2==0)//偶数阶的最外面的数是顺时针的方向
{
m=(n-1)*(n……
[/Quote]

厉害!
ganwg07 2011-09-21
  • 打赏
  • 举报
回复
我还想知道这个问题的 解决方案是怎样的
ganwg07 2011-09-21
  • 打赏
  • 举报
回复
大家按从 1 到 25 , 用线描绘下,就知道是怎么回事啦,谢谢
我就是不知道是什么问题,例:汉诺塔,歌赫巴德猜想之类的,请告之。。。
modicum_lf 2011-09-21
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 wyhllk 的回复:]
楼主这是我写的程序,可以帮你解决你的问题
#include"stdio.h"
//打印蛇形矩阵
#define MAX 30
int print(int n,int a[MAX][MAX])//用递归的方法
{
int i,j,m;
if(n==1)return a[0][0]=1;
else if(n%2==0)//偶数阶的最外面的数是顺时针的方向
{
m=(n-1)*(n-……
[/Quote]

++
正解 !

小类人猿 2011-09-20
  • 打赏
  • 举报
回复
我知道啦,楼主你的图形传上来的时候变形啦,我的图形中间的空格被删掉啦,这是个蛇形的矩阵
小类人猿 2011-09-20
  • 打赏
  • 举报
回复
1 2 9 10 25
4 3 8 11 24
5 6 7 12 23
16 15 14 13 22
17 18 19 20 21
要是这样子就有规律啦
小类人猿 2011-09-20
  • 打赏
  • 举报
回复
是个蛇形的来回迂回,但是感觉又不是楼主那样的

AnYidan 2011-09-20
  • 打赏
  • 举报
回复
迷宫题
seucs 2011-09-20
  • 打赏
  • 举报
回复
很明显的从1开始走,将1-25按顺序连成线
f_x_p0324 2011-09-20
  • 打赏
  • 举报
回复
没有见过。一层层的包围。
sky-ck 2011-09-20
  • 打赏
  • 举报
回复
排序?221 ?原题目是?
xwfde 2011-09-20
  • 打赏
  • 举报
回复
赶面条
liuyang19890710 2011-09-20
  • 打赏
  • 举报
回复
有规律,没看不出来。哎。
加载更多回复(2)

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧