螺旋问题

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: 我觉得这问题更像数学题,不想编程题...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值