为什么打印不出来这个图案?
输出一个数打印这个图案,例如输入个3,就如图所示 是个蛇形图案 我的代码怎么做了,请高手指教 1 2 3
8 9 4
7 6 5
#include <stdio.h>
main()
{
int i,j,n,k,t=1,a[20][20];
printf("please input a number between 0 to 20\n");
scanf("%d",&n);
while(t<=n*n)
{for(i=0;i<n;i++)
for(j=i;j<n;j++);
{a[i][j]=t;
t++;
}
for(k=i+1;k<n-i;k++)
{a[k][j]=t;
t++;
}
for(j=k-1;j>=i;j--)
{a[n-i][j]=t;
t++;
}
for(j=k-1;j>i;j--)
{a[i][j]=t;
t++;
}
}
for(i=0;i<n;i++)
for(j=0;j<n;j++)
printf("%3d",a[i][j]);
getch();
}
----------------解决方案--------------------------------------------------------
程序代码:
#include <stdio.h>
//SET_XY 获取方向增量
#define SET_XY(x,y,d) x=sym[d][0], y=sym[d][1]
int main()
{
int m, n, t;
int sym[4][2]={0,-1,
1,0,
0,1,
-1,0,
}; //连续化处理的关键
//依次对应:上,右,下,左。
while(scanf("%d%d%d", &m, &n, &t) != EOF)
{
int map[32][32] = {0}; //初始化数据
int x, y, dx, dy, d, nStep = 2;
for(x = 1, y = m + 1; x <= n; x++) //设置上下边界
map[x][0] = map[x][y] = -1;
for(x = 1, y = n + 1; x <= m; x++) //设置左右边界
map[0][x] = map[y][x] = -1;
x = y = 1; d = 1 + (t == 0);
SET_XY(dx, dy, d);
if(map[y+dy][x+dx]) //设置起始方向
{
d = (d+1+((t==0)<<1))%4; //d就是方向
SET_XY(dx, dy, d);
}
for(map[1][1] = 1;;nStep++) //螺旋遍历
{
x += dx , y += dy;
map[y][x] = nStep;
if(map[y+dy][x+dx]) //碰到边界或者有数的地方
{
d= (d+1+((t == 0)<<1))%4; //改变方向
SET_XY(dx, dy, d);
if(map[y+dy][x+dx])break; //无处可走,退出
}
}
for(y = 1; y <= n; y++) //输出结果
{
for(x = 1; x <= m; x++)
printf("%4d",map[y][x]);
printf("\n");
}
printf("\n");
}
return 0;
}
//SET_XY 获取方向增量
#define SET_XY(x,y,d) x=sym[d][0], y=sym[d][1]
int main()
{
int m, n, t;
int sym[4][2]={0,-1,
1,0,
0,1,
-1,0,
}; //连续化处理的关键
//依次对应:上,右,下,左。
while(scanf("%d%d%d", &m, &n, &t) != EOF)
{
int map[32][32] = {0}; //初始化数据
int x, y, dx, dy, d, nStep = 2;
for(x = 1, y = m + 1; x <= n; x++) //设置上下边界
map[x][0] = map[x][y] = -1;
for(x = 1, y = n + 1; x <= m; x++) //设置左右边界
map[0][x] = map[y][x] = -1;
x = y = 1; d = 1 + (t == 0);
SET_XY(dx, dy, d);
if(map[y+dy][x+dx]) //设置起始方向
{
d = (d+1+((t==0)<<1))%4; //d就是方向
SET_XY(dx, dy, d);
}
for(map[1][1] = 1;;nStep++) //螺旋遍历
{
x += dx , y += dy;
map[y][x] = nStep;
if(map[y+dy][x+dx]) //碰到边界或者有数的地方
{
d= (d+1+((t == 0)<<1))%4; //改变方向
SET_XY(dx, dy, d);
if(map[y+dy][x+dx])break; //无处可走,退出
}
}
for(y = 1; y <= n; y++) //输出结果
{
for(x = 1; x <= m; x++)
printf("%4d",map[y][x]);
printf("\n");
}
printf("\n");
}
return 0;
}
这个是从雨燕姐姐(好像是这个名吧)
的一个帖子里找来的,输入矩阵的长和宽,还有最大的数。
----------------解决方案--------------------------------------------------------
谢谢了
但是我的程序怎么输出的都是零啊?
----------------解决方案--------------------------------------------------------