原问题贴在上面...
由用户输入一个整数(>=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: 我觉得这问题更像数学题,不想编程题...