| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 664 人关注过本帖
标题:请问这个螺旋怎么编???(扩展到N*N)
只看楼主 加入收藏
心剑菩提
Rank: 1
等 级:新手上路
帖 子:249
专家分:0
注 册:2007-5-17
收藏
 问题点数:0 回复次数:8 
请问这个螺旋怎么编???(扩展到N*N)
请问这个螺旋怎么编???(扩展到N*N)
5 4 3
6 1 2
7 8 9
请问这题的算法是?????
搜索更多相关主题的帖子: 螺旋 
2007-05-18 18:38
pvocnxit
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2006-6-12
收藏
得分:0 

#include <stdio.h>
#include <conio.h>
const int N=8;
const int M=8;
main()
{ int a[N][M];
int k=0, m=0, v=0;
int direction = 0; //0:right; 1:down; 2:left; 3:up

while(v<=N*M)
{ a[k][m] = v;
v++;
switch(direction)
{
case 0: m++;
if(m==M-1-k)
direction = 1;
break;
case 1: k++;

if(k==N-1-(M-1-m))
direction = 2;
break;
case 2: m--;
if(m==N-1-k)
direction = 3;
break;
case 3: k--;
if(k==1+m)
direction = 0;
break;
}
}
for(k=0; k<N; k++)
{
for(m=0; m<M; m++)
printf("%3d", a[k][m]);
printf("\n");
}
}

看一看这个程序或许对你有点启发.
(别人发的帖子,我觉得写得很好,放到电脑上的;看到你的题目要求就想起了.呵呵)

2007-05-18 20:14
无玩过界
Rank: 1
等 级:新手上路
威 望:2
帖 子:246
专家分:0
注 册:2007-2-20
收藏
得分:0 

找不到规律,用这种方法(存储+方向控制)也不错。


2007-05-18 20:18
lhj2005
Rank: 1
等 级:新手上路
帖 子:230
专家分:0
注 册:2007-1-23
收藏
得分:0 
#include <stdio.h>
#define N 8
main(){
int i,j,n=1,a[N][N];
for(i=0;i<=N/2;i++){
for(j=i;j<N-i;j++)
a[i][j]=n++;
for(j=i+1;j<N-i;j++)
a[j][N-i-1]=n++;
for(j=N-i-2;j>i;j--)
a[N-i-1][j]=n++;
for(j=N-i-1;j>i;j--)
a[j][i]=n++;
}
for(i=0;i<N;i++){
printf("\n\n");
for(j=0;j<N;j++)
printf("%5d",a[i][j]);
}
}
试试这个吧!!!
2007-05-18 21:31
心剑菩提
Rank: 1
等 级:新手上路
帖 子:249
专家分:0
注 册:2007-5-17
收藏
得分:0 
二楼 四楼的大哥 你们的好象是外螺旋 二题目是从里螺旋

前世五百次的回眸 才换来今生的擦肩而过
2007-05-19 11:03
china008
Rank: 1
等 级:新手上路
帖 子:76
专家分:0
注 册:2007-5-8
收藏
得分:0 

[此贴子已经被作者于2007-5-19 13:18:57编辑过]


2007-05-19 11:17
china008
Rank: 1
等 级:新手上路
帖 子:76
专家分:0
注 册:2007-5-8
收藏
得分:0 

根据2楼改的 ,起始方向向左,你自己改一下吧。把 N M a[*][*] 值换成 3,5,7,9,11 v==N*M
#include <stdio.h>
#include <conio.h>
const int N=9;
const int M=9;
int main()
{ int a[9][9];
int k=0, m=0, v=81;
int direction = 0; /* 0:right; 1:down; 2:left; 3:up */

while(v>=1)
{ a[k][m] = v;
v--;
switch(direction)
{
case 0: m++;
if(m==M-1-k)
direction = 1;
break;
case 1: k++;

if(k==N-1-(M-1-m))
direction = 2;
break;
case 2: m--;
if(m==N-1-k)
direction = 3;
break;
case 3: k--;
if(k==1+m)
direction = 0;
break;
}
}
for(k=0; k<N; k++)
{
for(m=0; m<M; m++)
printf("%3d", a[k][m]);
printf("\n");
}
getch();
return 0;
}

[此贴子已经被作者于2007-5-19 13:15:22编辑过]


2007-05-19 13:12
yinlenc
Rank: 1
等 级:新手上路
帖 子:147
专家分:0
注 册:2007-5-17
收藏
得分:0 
就是6楼的方法但要注意N是奇or偶数

2007-05-19 13:17
a285028516
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2007-5-2
收藏
得分:0 
devcpp上调试过的

#include"stdio.h"
#define N 10000
main()
{
int M,p[N],i,j,k,x;
start:
printf("input M\n");

scanf("%d",&M);

for(i=1;i<=M*M;i++)
p[i]=0;

if(M%2==1)
{
k=M*M,j=0,x=-1;
for(i=0;i<M*M;i++)
{
p[k]=M*M-i;
if(k==M*M-M+1||k==1||k==M||p[k+x]!=0)
{
j++;

if(j%4==0)
x=-1;
if(j%4==1)
x=-M;
if(j%4==2)
x=1;
if(j%4==3)
x=M;
}

k+=x;
}
}
else
{
k=1,x=1,j=0;
for(i=0;i<M*M;i++)
{
p[k]=M*M-i;
if(k==M*M-M+1||k==M*M||k==M||p[k+x]!=0)
{
j++;

if(j%4==0)
x=1;
if(j%4==1)
x=M;
if(j%4==2)
x=-1;
if(j%4==3)
x=-M;
}

k+=x;

}
}


for(i=1;i<=M*M;i++)
{
printf("%3d",*(p+i));
if(i%M==0)
printf("\n");
}

goto start;
}

2007-05-19 21:42
快速回复:请问这个螺旋怎么编???(扩展到N*N)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017464 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved