用你熟悉的语言编写一个打印程序输入一个自然数N后,打印1至N的所有自然数,打印结果是环绕方式,
效果
如下:
21 ... N-1 N
20 7 8 9 10
19 6 1 2 11
18 5 4 3 12
17 16 15 14 13
#include<iomanip.h>
void main()
{
int i,k,n,m,x0,y0,x1,y1,z=0;
while(1){
cout<<"请输入行数(行数>0):";
cin>>n;
if(n>0)
break;}
int a[20][20];
m=n*n;
if(n%2==0){
i=0,k=0,x1=n,y1=n,x0=0,y0=0;
while(1){
for(k;k<y1;k++)
a[i][k]=m--;
y1--,i++,k--;
for(i;i<x1;i++)
a[i][k]=m--;
x1--,k--,i--;
for(k;k>=y0;k--)
a[i][k]=m--;
y0++,i--,k++;
for(i;i>x0;i--)
a[i][k]=m--;
x0++,k++,i++;
if(m<1)
break;}
}
if(n%2!=0){
i=n-1,k=n-1,x1=n,y1=n,x0=0,y0=0;
while(1){
for(k;k>=y0;k--)
a[i][k]=m--;
y0++,i--,k++;
for(i;i>=x0;i--)
a[i][k]=m--;
x0++,k++,i++;
for(k;k<y1;k++)
a[i][k]=m--;
y1--,i++,k--;
for(i;i<x1-1;i++)
a[i][k]=m--;
x1--,k--,i--;
if(m<1)
break;}
}
for(i=0;i<n;i++)
{
for(k=0;k<n;k++)
cout<<setw(4)<<a[i][k];
cout<<endl;
}
cout<<endl;
}
#include <iostream.h>
#include <math.h>
int a[100][100];
void main()
{
int n, c, i = 50, j = 50, temp = 1, k = 1, num = 1;
cin >> n;
// 模拟螺旋填数
a[50][50] = 1;
for (c=1; c<=(int)sqrt(n)-1; ++c)
{
k = temp;
while (k>0) //向右
{
++j;
a[i][j] = ++num;
--k;
}
k = temp;
while (k>0) //向下
{
++i;
a[i][j] = ++num;
--k;
}
k = ++temp;
while (k>0) //向左
{
--j;
a[i][j] = ++num;
--k;
}
k = temp;
while (k>0) //向上
{
--i;
a[i][j] = ++num;
--k;
}
++temp;
}
// 输出
for (int ii=i; ii<=i+(50-i)*2+1; ++ii)
{
for(int jj=j; jj<=j+(50-j)*2+1; ++jj)
{
if (a[ii][jj]>0 && a[ii][jj]<=n )
{
cout << a[ii][jj] << " ";
if (a[ii][jj]<10) // 多输出一个空格站位
cout << " ";
}
else if(a[ii][jj] > n) {cout << " ";}
}
cout << endl;
}