免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
0
11 [报告]
发表于 2007-04-02 15:51 |只看该作者
斑竹说的有道理,这还是EMC全国统一考试的最后一题呢。太随便了

论坛徽章:
2
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:11
12 [报告]
发表于 2007-04-02 17:18 |只看该作者

  1. int p(int i, int N) {
  2.         return i <= N && (printf("%d\n", i) && p(i + 1, N) || i < N && printf("%d\n", i)) && 0;
  3. }
复制代码

论坛徽章:
0
13 [报告]
发表于 2007-04-02 17:43 |只看该作者

  1. int p (int i, int N)
  2. {
  3.     return i < 2*N && printf ("%d\n", N - (N-i) * (2*(i<N)-1) ) && p (i+1, N);
  4. }
复制代码


修正一下,加個return

[ 本帖最后由 飞灰橙 于 2007-4-2 17:52 编辑 ]

论坛徽章:
0
14 [报告]
发表于 2007-04-02 21:05 |只看该作者
只能说EMC的人才如用有问题,这种题目个人觉得没啥意思啊

论坛徽章:
0
15 [报告]
发表于 2007-04-02 21:47 |只看该作者
原帖由 Edengundam 于 2007-4-2 15:51 发表

恩.....我只能这样了..

  1. return (N >= i) && printf("%d\n", i) && (N > i) && p(i + 1, N) && printf("%d\n", i);
复制代码


错了,应该是这样:


  1. return (N >= i) && printf("%d\n", i) && (N > i) && p(i + 1, N) & printf("%d\n", i);
复制代码


最后一个printf前应该是&,否则每次p(i + 1, N)返回的都是假,这样&&运算符短路,不会执行最后的printf了,也就无法输出6.....1了

论坛徽章:
0
16 [报告]
发表于 2007-04-02 22:08 |只看该作者
原帖由 InfoHunter 于 2007-4-2 21:47 发表


错了,应该是这样:


  1. return (N >= i) && printf("%d\n", i) && (N > i) && p(i + 1, N) & printf("%d\n", i);
复制代码


最后一个prin ...


恩, 确实搞错了,我倾向学flw的办法. 比 & 语意稍微明确一点.

  1.     return ((N >= i) && printf("%d\n", i) && (N > i) && p(i + 1, N) && printf("%d\n", i)) + 1;
复制代码


不过还是最开始写的语意上明确...

论坛徽章:
0
17 [报告]
发表于 2007-04-02 23:35 |只看该作者
递归是想到了,要我一下子做出,恐怕有难度

论坛徽章:
0
18 [报告]
发表于 2007-04-03 08:28 |只看该作者
原帖由 InfoHunter 于 2007-4-2 21:47 发表


错了,应该是这样:


  1. return (N >= i) && printf("%d\n", i) && (N > i) && p(i + 1, N) & printf("%d\n", i);
复制代码


最后一个prin ...




怎么就是没看懂,后半部分的6 5 4 3 2 1 是怎么生成的啊?



论坛徽章:
0
19 [报告]
发表于 2007-04-03 09:15 |只看该作者
原帖由 lee2008 于 2007-4-3 08:28 发表




怎么就是没看懂,后半部分的6 5 4 3 2 1 是怎么生成的啊?





典型的递归,还是用p(1,7)来说
当i= 6时,调用p(7,7),递归进入p,这时(N > i)为假,返回假,回到p(6,7),这时i = 6,然后执行最后的printf("%d\n", i),打印出6,类推得到5.....1
流程:
p(1,7)
p(2,7)
  ....
  p(7,7)
p(6,7)
...
p(1,7)

论坛徽章:
0
20 [报告]
发表于 2007-04-03 09:45 |只看该作者
原帖由 InfoHunter 于 2007-4-3 09:15 发表


典型的递归,还是用p(1,7)来说
当i= 6时,调用p(7,7),递归进入p,这时(N > i)为假,返回假,回到p(6,7),这时i = 6,然后执行最后的printf("%d\n", i),打印出6,类推得到5.....1
流程:
p( ...




我就是这里没搞明白, 怎么回到p(6,7)的?  i是如何自减的啊?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP