菜鸟求看螺旋矩阵 输出除了第一个数 全是乱码
#include<stdio.h>
void luoxuan(int a[][5],int m,int n);//螺旋函数
int main()
{
int a[5][5],m=5,n=5,i,j;
luoxuan(a,m,n);
for(i=0;i<m;i++)
{
{
for(j=0;j<n;j++)
printf("%d",a[i][j]);
}
printf("\n");
}
}
void luoxuan(int a[][5],int m,int n)
{
int right,left,down,up;
int d=1,x=0,y=0;
while(1)
{
a[x][y]=d++;
//判断能否向着该方向行走
right=(y<n-1)&&(a[x][y+1]==0);
down=(x<m-1)&&(a[x+1][y]==0);
left=(y>0)&&(a[x][y-1]==0);
up=(x>0)&&(a[x-1][y]==0);
//行走的方向
if(down)
{
if(right) y++;
else x++;
}
else if(left)
{
if(down) x++;
else y--;
}
else if(up)
{
if(left) y--;
else x--;
}
else if(right)
{
if(up) y--;
else y++;
}
else break;
}
}
[解决办法]
http://blog.csdn.net/xuchao1229/article/details/8117312
http://blog.csdn.net/xuchao1229/article/details/8119261
[解决办法]
#include<stdio.h>
void luoxuan(int a[][5],int m,int n);//螺旋函数
int main()
{
int a[5][5] = {0}/*首先对数组进行初始化,如果不想初始化,就定义全局数组,编译器会对根据数组类型进行相应初始化*/,m=5,n=5,i,j;
luoxuan(a,m,n);
for(i=0;i<m;i++)
{
{
for(j=0;j<n;j++)
printf("%d",a[i][j]);
}
printf("\n");
}
}
void luoxuan(int a[][5],int m,int n)
{
int right,left,down,up;
int d=1,x=0,y=0;
while(1)
{
a[x][y]=d++;
//判断能否向着该方向行走
right=(y<n-1)&&(a[x][y+1]==0);
down=(x<m-1)&&(a[x+1][y]==0);
left=(y>0)&&(a[x][y-1]==0);
up=(x>0)&&(a[x-1][y]==0);
//行走的方向
if(down)
{
if(right) y++;
else x++;
}
else if(left)
{
if(down) x++;
else y--;
}
else if(up)
{
if(left) y--;
else x--;
}
else if(right)
{
if(up) y--;
else y++;
}
else break;
}
}
#include <stdio.h>
#define MAXN 10
char m[MAXN+2][MAXN+2];
char d;
int x,y,k,n;
void main() {
while (1) {
printf("Input n(1..%d):",MAXN);
fflush(stdout);
rewind(stdin);
if (1==scanf("%d",&n)) {
if (1<=n && n<=MAXN) break;
}
}
y=0 ;for (x=0;x<=n+1;x++) m[y][x]=1;
y=n+1;for (x=0;x<=n+1;x++) m[y][x]=1;
x=0 ;for (y=0;y<=n+1;y++) m[y][x]=1;
x=n+1;for (y=0;y<=n+1;y++) m[y][x]=1;
for (y=1;y<=n;y++) {
for (x=1;x<=n;x++) {
m[y][x]=0;
}
}
x=1;
y=1;
k=0;
d='D';
while (1) {
k++;
if (k>n*n) break;
m[y][x]=k;
switch (d) {
case 'D':
if (0==m[y+1][x]) y++;
else {x++;d='R';}
break;
case 'R':
if (0==m[y][x+1]) x++;
else {y--;d='U';}
break;
case 'U':
if (0==m[y-1][x]) y--;
else {x--;d='L';}
break;
case 'L':
if (0==m[y][x-1]) x--;
else {y++;d='D';}
break;
}
}
for (y=1;y<=n;y++) {
for (x=1;x<=n;x++) {
printf("%4d",m[y][x]);
}
printf("\n");
}
}