声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

声振论坛 展示 基础理论 查看内容

放松一下,来个编程挑战(不限于C/C++,而且答对有奖励)

2011-3-18 16:22| 发布者: 雪缘| 查看: 1014| 评论: 0|来自: 振动论坛

摘要: 咱们论坛的帖子多以问/答为主,今儿来点脑筋急转弯吧。 这个问题很早在CSDN/C版上看到过: 要求实现这样的函数: int p(int i, int N); 功能:调用该函数,打印如下格式的输出,例p(1, 7); 1 2 3 4 5 ...
咱们论坛的帖子多以问/答为主,今儿来点脑筋急转弯吧。

这个问题很早在CSDN/C版上看到过:

要求实现这样的函数:
int p(int i, int N);
功能:调用该函数,打印如下格式的输出,例p(1, 7);
1
2
3
4
5
6
7
6
5
4
3
2
1
即每行一个数字。(注意:N只打印一次)
要求:
1. 函数中唯一能够调用的函数就是printf。(是不是意味着不能递归?)
2. 不准使用如下的关键字:typedef, enum, do, while, for, switch, case, break, continue, goto, if。 (通常的循环也别想了?)
3. 不能使用逗号表达式和?:表达式。
4. 函数中只能有一条语句(就是只能出现一个;)。


PS:如果你使用其他语言,也请尽量满足对应语言中与上述4条相对应的规则,并作出相应的说明!


怎么样,各位,贴出你的解决方案吧,我私自做主了,一个转贴的答案+5点体能一个原创的答案+1点威望


=================================解答分割线===========================
第一个满足全部约束条件的代码如下,由wqsong 提供,使用C语言巧妙地实现,详细分析见10L、15L、17L等:
  1. int p(int i, int N)
  2. {
  3.         return (*((short *)&i+1) || (*((short *)&i+1) = *(short *)&i)) && *(short *)&i <= (2*N - (*((short *)&i+1))) &&  printf("%d\n", N - (N - *(short *)&i) * (2*(*(short *)&i < N) - 1)) && (*((unsigned *)&i - 1) -= 5) && ++*(short *)&i;
  4. }
复制代码

第二个?It's up to you!

本文内容由 Rainyboy 提供

最新评论

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-5-20 10:50 , Processed in 0.030236 second(s), 15 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

返回顶部