螺旋问题

来源:互联网 发布:淘宝开店学校 编辑:程序博客网 时间:2024/04/29 19:59

http://topic.csdn.net/u/20110428/13/cbb92dc2-0005-42ba-9130-966784b041a4.html?seed=865774094&r=73063899#r_73063899

原问题贴在上面...

 

由用户输入一个整数(>=1),则形成一个顺时针螺旋递减等差数列矩阵,

符合1,2,3…n*n



输入数字2,则程序输出:
1 2
4 3

输入数字3,则程序输出:
1 2 3
8 9 4
7 6 5

输入数字4, 则程序输出:
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7


我是先归纳了数学规律后然后再做的,没用数组,因为有规律的,所以数组派不上用场


[code=C/C++]

#include <stdio.h>int main(){ int n=0,i; while(1) { printf("/nEnter a number:"); scanf("%d",&n); printf("The result is:/n"); for(i=0; i<n*n; i++) { /* 左上角为原点,(i/n, i%n)为坐标 */ int k = i/n > (n-1-i/n)? (n-1-i/n):i/n; k = k > i%n ? (i%n) : k; k = k > (n-1-i%n)? (n-1-i%n) : k; /* 以一个圈为一个回环,算出点在哪个回环上 */ if((i/n==k)&&(i%n<n-k)) printf("%d ",4*k*(n-k)+i%n+1-k);/* 上回环 */ else if(((n-1-i%n)==k)&&(i/n>k)) printf("%d ",4*k*(n-k)+(n-2*k-1)+i/n+1-k);/* 右回环 */ else if (((n-1-i/n)==k)) printf("%d ",4*k*(n-k)+3*(n-2*k-1)-i%n+1+k);/*下回环 */ else if((i%n==k)) printf("%d ",4*(k+1)*(n-k-1)-i/n+k+1);/* 左回环 */ if((i+1)%n==0) printf("/n"); } } return 0;}

[/code]

PS: 我觉得这问题更像数学题,不想编程题...