帮我看看 在线等 谢谢 急急急!!1
187
296
345
n=3;
1 12 11 10
2 13 16 9
3 14 15 8
4 5 6 7
n=4;
问题 当为n时怎么编写程序?
我的解法:(错了 不知道为什么)
#include<iostream>
using namespace std;
int main()
{
int i,j,a[50][50],n,b=n-1,c=n,d=0,x=n,y=0,k=1;
cin>>n;
for(i=0;i<n/2;i++,c--,d++)
{
if(j=d&&j<c-1)
{for(j=0;j<n;j++)
a[j][d]=k++;}
if(b=c-1&&j<c-1)
{for(j=0;j<n;j++,b--)
a[c-1][j]=k++;}
if(x=c-1&&j>d)
{for(j=0;j<n;j++,x--)
a[n-1-j][c-1]=k++;}
if(y=d&&j>d+1)
{for(j=0;j<n;j++,y++)
a[d][n-1-j]=k++;}
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
cout<<a[i][j]<<" ";
cout<<endl;
}
return 0;
}
[解决办法]
#include <stdio.h>#define MAXN 10char 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"); }}