免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 35557 | 回复: 117
打印 上一主题 下一主题

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

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-04-02 14:45 |只看该作者 |倒序浏览
函数原形已经给出:int p(int i, int N);
功能:调用该函数,打印如下格式的输出,例p(1, 7);
1
2
3
4
5
6
7
6
5
4
3
2
1
即每行一个数字。(注意:N只打印一次)
要求:
函数中唯一能够调用的函数就是printf。
只使用一条语句,如果你真的不能用一条语句,每增加一条语句扣1分。
不准使用如下的关键字:typedef, enum, do, while, for, switch, case, break, continue, goto,
until, if,  ..具体很多我也忘了,反正能用的不多。
不能使用逗号表达式和?:表达式。
标准:(总分10分)
1. 每多一条语句扣1分,即每多一个;就扣1分
2. 每使用一次if或?:扣2分
3. 每使用一次for,while, swith各扣4分
大体上就是如上的要求了。

[ 本帖最后由 weckay 于 2007-4-2 15:15 编辑 ]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
2 [报告]
发表于 2007-04-02 14:57 |只看该作者
很明显就是想让递归嘛。不过原型给得不清楚,没有描述参数语义。下面我假设 N 是指数字的个数而不是截止数。
  1. int p( int i, int N ){
  2.     return ( N && printf( "%d\n", i ) && p( i+1, N-1 ) && ( N != 1 && printf( "%d\n", i ) ) ) + 1;
  3. }
复制代码

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
3 [报告]
发表于 2007-04-02 15:06 |只看该作者
原帖由 flw 于 2007-4-2 14:57 发表
很明显就是想让递归嘛。不过原型给得不清楚,没有描述参数语义。下面我假设 N 是指数字的个数而不是截止数。
[code]int p( int i, int N ){
    return ( N && printf( "%d\n", i ) &&am ...

好牛。

论坛徽章:
0
4 [报告]
发表于 2007-04-02 15:11 |只看该作者
好久没来,一来又见强贴。

论坛徽章:
0
5 [报告]
发表于 2007-04-02 15:11 |只看该作者
这个N好像题目中就没有说清楚是上限还是个数,也可能是我忘记了。原题就是给的p(1, 7)这个例子,所以通过给的示例也不能判断出N的具体用意。不过这个应该影响不大吧,可以相互转换的吗

论坛徽章:
0
6 [报告]
发表于 2007-04-02 15:30 |只看该作者
打(i, N)范围的....

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

论坛徽章:
0
7 [报告]
发表于 2007-04-02 15:39 |只看该作者
我想起来了,N应该是上限。我记得原题中有一句话是这样的up to N and then down to i.

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
8 [报告]
发表于 2007-04-02 15:42 |只看该作者
稍微简化了一下:
  1. int p( int i, int N ){
  2.     return ( printf( "%d\n", i ) && N > 1 && p( i+1, N-1 ) && printf( "%d\n", i ) ) + 1;
  3. }
复制代码


to 6 楼:你那个也可以简化的。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
9 [报告]
发表于 2007-04-02 15:43 |只看该作者
原帖由 weckay 于 2007-4-2 15:39 发表
我想起来了,N应该是上限。我记得原题中有一句话是这样的up to N and then down to i.

如果是这样的话,那这个函数的原型就给得非常恶心。
如果是我,我会给出
  1. int p( int min, int max );
复制代码

论坛徽章:
0
10 [报告]
发表于 2007-04-02 15:51 |只看该作者
原帖由 flw 于 2007-4-2 15:42 发表
稍微简化了一下:
  1. int p( int i, int N ){
  2.     return ( printf( "%d\n", i ) && N > 1 && p( i+1, N-1 ) && printf( "%d\n", i ) ) + 1;
  3. }
复制代码


...



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

  1. return (N >= i) && printf("%d\n", i) && (N > i) && p(i + 1, N) && printf("%d\n", i);
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP