免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: weckay
打印 上一主题 下一主题

[函数] EMC小有难度的笔试,撰写仅有一行的语句的函数??? [复制链接]

论坛徽章:
0
51 [报告]
发表于 2007-04-03 14:30 |只看该作者
原帖由 飞灰橙 于 2007-4-3 14:27 发表


是的。


看可不可以用N的高位把i存起来,解决后面回到1的问题,不过那样实际支持只有16位了

论坛徽章:
0
52 [报告]
发表于 2007-04-03 15:17 |只看该作者
原帖由 slay78 于 2007-4-3 14:30 发表


看可不可以用N的高位把i存起来,解决后面回到1的问题,不过那样实际支持只有16位了


也许有可能利用返回值所占据的空间,就能支持到32位了

论坛徽章:
0
53 [报告]
发表于 2007-04-03 18:51 |只看该作者
int p( int i, int N ){
    return ( N && printf( "%d\n", i ) && p( i+1, N-1 ) && ( N != 1 && printf( "%d\n", i ) ) ) + 1;
}

flw 美女的代码 最尾处为何+ 1, 好像多余的吧,没看明白。

论坛徽章:
0
54 [报告]
发表于 2007-04-03 20:05 |只看该作者
我也不清楚+1到底是怎么实现的
不过我试过了,加其他的也是一样,比如下面的代码,+100,结果还是一样。

<code>
#include <stdio.h>

int p(int i,int N)
{
return ( N && printf( "%d\n", i ) && p( i+1, N-1 ) && ( N != 1 && printf( "%d\n", i ) ) ) +100;
}

int main()
{
    p(1,7);
}

</code>

论坛徽章:
0
55 [报告]
发表于 2007-04-03 20:16 |只看该作者

初学者

很多东西看不明白啊!学的太少了.

论坛徽章:
0
56 [报告]
发表于 2007-04-03 20:46 |只看该作者
想象一下,如果没有1的话,递归调用上层的返回值是0的话就不执行最后面的打印语句了,为假!!!!!!!
所以要保持条件为真,只要不是0就可以..
你们试一下,为0的话后面的6,5,4,3,2,1肯定打印不出来,不计算后面的表达式,就是不执行printf

论坛徽章:
0
57 [报告]
发表于 2007-04-03 21:23 |只看该作者
哦,搞懂了,其实只要非0就可以了,不过这些可真是高级技巧啊,不知道哪里能够学习到?

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
58 [报告]
发表于 2007-04-03 22:23 |只看该作者
原帖由 thinkinnight 于 2007-4-3 21:23 发表
哦,搞懂了,其实只要非0就可以了,不过这些可真是高级技巧啊,不知道哪里能够学习到?

多做做脑筋急转弯就行了

论坛徽章:
0
59 [报告]
发表于 2007-04-04 09:07 |只看该作者
0040110C   call        @ILT+0(_p) (00401005)
00401111   add         esp,8

经典啊!!!!
编译原理学好很重要  ,恩,调试也很重要

论坛徽章:
0
60 [报告]
发表于 2007-04-04 12:00 |只看该作者
原帖由 飞灰橙 于 2007-4-3 13:27 发表
一条语句,只调用printf, 不调用其他函数,包括函数p自身的。
(近在32位pc, gcc或vc试验过,不保证任何环境有效)
[code]
int p (int i, int N)
{
        return i < 2*N
                && printf ("%d\n&qu ...


佩服!

崇拜一下!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP