| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1927 人关注过本帖, 1 人收藏
标题:每日一题!NO.3(适合新手做练习)-幻方问题(已经给出答案!)
只看楼主 加入收藏
啊C
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:84
专家分:177
注 册:2010-6-24
收藏
得分:0 
又过了一天了,本人确实是个菜鸟,每日一题,只是为了和大家一起进步,感谢大家的参与,也谢谢高手们 在里面给我们的算法和例子,每日一题发布的时间和给出答案的时间都是每天晚上10:00左右,也就是我们放学后。

每日一题,不求其它,只求每天我们这些菜鸟有一点进步,集水成渊,集土成山,我相信我们在进步,我们总有一天到了量到质的变化时,可以写自己高级的程序,做自己的系统,有一技能之长。
收到的鲜花
  • voidx2011-06-07 22:42 送鲜花  5朵   附言:强势支持

亲爱的朋友们动起手来吧,让我们一起迈向C语言的世界!
2011-06-07 22:40
啊C
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:84
专家分:177
注 册:2010-6-24
收藏
得分:0 
有趣的思考
以下是引用beyondyf在2011-6-7 21:41:53的发言:

抛砖引玉一下,送大家一个函数
参数的意义:n:幻方的阶数,r:幻方第r行,c:幻方第c列
返回值:n阶幻方第r行第c列的值。其中r,c从0开始计数。
比如说10001阶幻方,打印出来可能不现实,但你可以用这个函数看看它的一部分。
 
另外哪位有兴趣写个逆函数,即已知n阶幻方求某一值所在的行列位置。函数的时间复杂度要求是O(1)。
int MatIndex(int n, int r, int c)
{
    int p, q, s, h;
    h = n >> 1;
    p = r + c - h;
    if(p >= n) p -= n;
    if(p < 0) p += n;
    if(p <= h) q = p << 1; else q = ((p - h - 1) << 1) + 1;
    s = q - r;
    if(s < 0) s += n;
    return p * n + s + 1;
}
很有趣的思考,希望能写哈注释,偶是新手!“<<”这东西不太明白!

亲爱的朋友们动起手来吧,让我们一起迈向C语言的世界!
2011-06-07 22:43
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
算了,换一下写法。
int MatIndex(int n, int r, int c)
{
    int p, q, s, h;
    h = n / 2;
    p = r + c - h;
    if(p >= n) p -= n;
    if(p < 0) p += n;
    if(p <= h) q = p * 2; else q = (p - h) * 2 - 1;
    s = q - r;
    if(s < 0) s += n;
    return p * n + s + 1;
}
我要出差一段时间了,大约10天后回来。如果到时候这贴子还没掉出第1页去,我来解释算法。如果那时还没人写出逆函数,我送大家一个。

重剑无锋,大巧不工
2011-06-08 07:22
yangkai655
Rank: 1
等 级:新手上路
帖 子:17
专家分:6
注 册:2011-5-16
收藏
得分:0 
谢谢!昂!我一定要学会!
2011-06-08 13:47
快速回复:每日一题!NO.3(适合新手做练习)-幻方问题(已经给出答案!)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015422 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved