1. 程式人生 > >N階的螺旋方陣。。。。程式設計

N階的螺旋方陣。。。。程式設計

N階的螺旋方陣


 題目描述: 要求從鍵盤任意輸入一個數n(n<10),然後打印出n階的螺旋方陣
 題目解釋: 所謂的n階螺旋方陣是指方陣的邊長為n,其列印輸出時的順序為, 例如:
  樣例輸入: 4
  樣例輸出: 
  1 2 3 4
  12 13 14 5
  11 16 15 6
  10 9 8 7
  題目難度加了一點,要認真思考了,呵呵!

一高手曰。。。。。我就第一個寫吧!
一定要給最高分哦!
<pre>
#include<iostream>
#include <iomanip>
#include <cassert>
#include <new>
using namespace std;



void main()
{
int num;
int k=1;
int i,j;
int tamp=0;

cout<<" 下面請輸入螺旋方陣的階數:";
cin>>num;
int *array;
array=new int[num*num];
assert(array!=0);

for(int i=0;i<num*num;i++)
array[i]=0;

while(k<=num*num)
{
for(i=tamp,j=tamp;j<num-tamp-1;j++)
{
array[i*num+j]=k;
++k;
}
for(;i<num-tamp-1;i++)
{
array[i*num+j]=k;

k++;
}
for(;j>tamp;j--)
{
array[i*num+j]=k;
k++;
}
for(;i>tamp;i--)
{
array[i*num+j]=k;
k++;
}
++tamp;
}
if (num%2)
{
array[num/2*num+num/2]=num*num;
}

for(int i=0;i<num*num;i++)
{
if(i%num==0)
cout<<endl;
cout<<setw(3)<<array[i];
}
cout<<endl;
}
</pre>

後一人嘆。。。

哎,這麼多沒見過的東西,果然用我現學的知識還不行呀!

又來人曰。。。

我真的感覺,我上學是白上了,唉……

大神安慰。。。。

該好好學C了

後有人貼告示。。。。

#include <stdio.h>
#define N 21
void main()
{
int n,i,j,t;
int s=0;
int a[N][N];
printf("please input the n:\n");
scanf("%d",&n);
for(t=1;t<n/2.0+1;t++)
{
for(j=t;j<=n-t+1;j++)
a[t][j]=j+1-t+s;
for (i=t+1;i<=n-t+1;i++)
a[i][n-t+1]=n-2*(t-1)+i+1-t-1+s;
for(j=n-t;j>=t;j--)
a[n-t+1][j]=3*(n-2*(t-1))-1-(j+1-t)+s;
for (i=n-t;i>t;i--)
a[i][t]=4*(n-2*(t-1))-2-(i+1-t)+s;
s=a[t+1][t];
}
for (i=1;i<=n;i++)
{for (j=1;j<=n;j++)
printf("%-4d",a[i][j]);
  printf("\n");

}

第一圈:a【1】【j】j:1~n
a【i】【n】i:1~n;
a【n】【j】j:n~1;
a【i】【0】i:n~1;
第二圈:。。。。。。
就這樣找出規律,依次給二維陣列賦值,然後輸出。。

這個對n的值沒有什麼要求,因為輸出的列數有限,所以最大能輸出20以內的螺旋方陣。。

怎麼樣??給點評價哦吧。。

再然後有人。。。。。。

#include <stdio.h>
#define N 21
void main()
{
int n,i,j,t;
int s=1;
int a[N][N];
printf("please input the n:\n");
scanf("%d",&n);
for(t=1;t<n/2.0+1;t++)
{
for(j=t;j<=n-t+1;j++)
a[t][j]=s++;
for (i=t+1;i<=n-t+1;i++)
a[i][n-t+1]=s++;
for(j=n-t;j>=t;j--)
a[n-t+1][j]=s++;
for (i=n-t;i>t;i--)
a[i][t]=s++;
}
for (i=1;i<=n;i++)
{for (j=1;j<=n;j++)
printf("%-4d",a[i][j]);
  printf("\n");

}

一樓上的說。。。。

今天閒著沒事再看了一遍,一同學給的點思路,總算是用所學知識寫了出來,慚愧!!!
#include<stdio.h>
void main()
{
int a=1,b[10][10],p=1,q,i=0,j=0,n;
printf("請輸入您要的矩陣階數(1到9之間):");
scanf("%d",&n);
q=n;
for(;;)
{if(a>n*n||q<=0) break;
for(;j<q;j++,a++)
{if(a>n*n) break;b[i][j]=a;}

i=i+1;j=q-1;
for(;i<q;i++,a++)
{if(a>n*n) break;b[i][j]=a;}

j=j-1;i=q-1;
for(;j>=p-1;j--,a++)
{if(a>n*n) break;b[i][j]=a;}

i=i-1;j=p-1;
for(;i>p-1;i--,++a)
{if(a>n*n) break;b[i][j]=a;}
p++;j++;q=q-1;i=i+1;
}
for(i=0;i<n;i++)
{for(j=0;j<n;j++)
printf("%5d",b[i][j]);printf("\n");}

}