求算法:

clare2003 2004-08-11 07:24:02


求算法:

输入N( N>5)


输出图形(N=5)

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
...全文
148 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
micty 2004-08-12
  • 打赏
  • 举报
回复
楼上写的好啊,收藏
#include <stdio.h>
#include <stdlib.h>

#define MAX 20

void fill (int a[MAX][MAX], int n);

int main()
{
int a[MAX][MAX];
int n;
int i, j;
printf ("n:");
scanf ("%d", &n);

fill (a, n);

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

system ("pause");
}

void fill (int a[MAX][MAX], int n)
{
int i, j;
int s = 1;
int x = 0, y = 0;
int d[4][2] = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};
for (; n > 1; n -= 2)
{
for (i = 0; i < 4; ++i)
for (j = 1; j < n; ++j)
{
a[x][y] = s++;
x += d[i][0];
y += d[i][1];
}
x++;
y++;
}
if (n == 1)
a[x][y] = s;

return;
}
cxjddd 2004-08-11
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <stdlib.h>

#define MAX 20

void fill (int a[MAX][MAX], int n);

int main()
{
int a[MAX][MAX];
int n;
int i, j;
printf ("n:");
scanf ("%d", &n);

fill (a, n);

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

system ("pause");
}

void fill (int a[MAX][MAX], int n)
{
int i, j;
int s = 1;
int x = 0, y = 0;
int d[4][2] = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};
for (; n > 1; n -= 2)
{
for (i = 0; i < 4; ++i)
for (j = 1; j < n; ++j)
{
a[x][y] = s++;
x += d[i][0];
y += d[i][1];
}
x++;
y++;
}
if (n == 1)
a[x][y] = s;

return;
}
backspray 2004-08-11
  • 打赏
  • 举报
回复
难道只能用这样地填充吗?
不知道谁有没有办法弄个通项公式
Kusk 2004-08-11
  • 打赏
  • 举报
回复
呵呵,螺旋方阵,应该到算法版问呀~~~:)

帮你粘个代码,写得蛮有个性的,不用数组:

///fill.h
////////////
#include <stdio.h>

void fill (int n, int start, int m) { //n填数规模, start起始数, 第m行
int j;
if ( m > n){
printf ("ERROR");
return;
}

//1*1基本情况
if ( n == 1) {
printf ("%d ", start);
return;
}

if ( m == 0) { //第一行
printf("%d ", start);
for ( j = 1; j < n; j ++) {
printf( "%d ", (n-1)*4+start-j );
}
return;
}
else if ( m == n-1) { //最后一行
for ( j = 0; j < n;j ++){
printf("%d ",start+n-1+j);
}
return;
}
else { //中间的
printf("%d ", start+m);
fill (n-2, (n-1)*4+start, m-1); //打印n-2方块的第m-1行
printf("%d ", start+(n-1)*3-m);
return;
}
}

//fill.cpp
//////////////
#include <stdio.h>

#include "fill.h"

int main () {
int m;
int n = 9;
int start = 10;
for ( m = 0; m < n; m ++) {
fill ( n, start, m);
printf ("\n");
}
return 0;
}
waini12 2004-08-11
  • 打赏
  • 举报
回复
学习学习

69,371

社区成员

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

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