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");}
}