一条语句来实现

zxqwxyql 2009-10-29 10:53:58
写一个函数 int p(int i, int N);

能够输出i到N再到i,即以参数1,7调用函数,输出结果为

1

2

3

4

5

6

7

6

5

4

3

2

1

要求只用一个语句完成,不允许用?:等n多操作符和关键字。只能用一个printf库函数

...全文
408 40 打赏 收藏 转发到动态 举报
写回复
用AI写文章
40 条回复
切换为时间正序
请发表友善的回复…
发表回复
forever7777 2010-06-18
  • 打赏
  • 举报
回复
如此一句容易理解
return printf("%d\n", i) && (N>i) && (p(i+1,N) || printf("%d\n", i)&&false);
lirg8405 2009-12-13
  • 打赏
  • 举报
回复
太强了,我想不到,学习了
Glory_genius 2009-12-12
  • 打赏
  • 举报
回复
太弓虽了
Silitex 2009-12-11
  • 打赏
  • 举报
回复
众人拾柴火焰高,一道题经过了大家辛苦的思考,得到了一个相当好的答案!这个帖子算是给我深有感悟啊!
fenizi129427 2009-12-11
  • 打赏
  • 举报
回复
学习 学习 还是学习
hdffdh2000 2009-12-11
  • 打赏
  • 举报
回复
什么意思啊
dcfeng 2009-12-11
  • 打赏
  • 举报
回复
我的理解:
i 从 1到7 p函数共进栈6次,依次为p(2,7) p(3,7) p(4,7) p(5,7) p(6,7) p(7,7)

进栈函数均执行致 p(i+1,N),当i=7时(N>i)false,程序开始返回进栈函数

p(7,7)执行 p(i, i) 输出6 (i+1=7故i为6)

以下依次5 4 3 2 1
pw_Start 2009-12-08
  • 打赏
  • 举报
回复
说一下我的理解:
当i<N时,执行p(i,N)
首先会输出i,
(判断条件N>i,可以保证在N>i时,执行后面的递归,N=i时只输出i,不可能将i增加到大于N的情况)
然后p(i+1,N)使和变量i依次增加1,直到i等于N时,只输出i,
后面的p(i,i),只是输出i,由于N>i为false,所以不执行后面的递归(p(i+1,N) || p(i, i))。
由于p(i+1,N)和p(i,i)是或的关系,所以只有当前者返回为false时,才会执行后者,所以输出的数字顺序为从i到N,再到i
pw_Start 2009-12-08
  • 打赏
  • 举报
回复
return printf("%d\n", i) && (N>i) && (p(i+1,N) || p(i, i));
确实很强大。
jianzhibeihang 2009-12-06
  • 打赏
  • 举报
回复
能详细的解释下这句话的执行过程吗?
printf("%d\n", i)&& (N>i)&& (p(i+1,N)|| p(i, i));
kevinlifeng 2009-12-06
  • 打赏
  • 举报
回复
用这些递归会让时间复杂度提高,还不如写多几几条语句,现在的软件都是追求快,代码简化会付出太大的代价
ToBeTough 2009-12-06
  • 打赏
  • 举报
回复
学习咯 !
langbing2009 2009-12-06
  • 打赏
  • 举报
回复
学习中
jianzhibeihang 2009-12-06
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 logiciel 的回复:]
17楼的可以简化、合并为一条语句:

C/C++ codeint p(int i,int N)
{return printf("%d\n", i)&& (N>i)&& (p(i+1,N)|| p(i, i));
}
[/Quote]
能解释下吗?
zxqwxyql 2009-12-06
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 silitex 的回复:]
调试出了需要的功能的函数:
int p(int i, int N)
{
int x;
printf("%d\n", i);
return ( (N>i) && (p(i+1,N)) ) || ( (N>i) && p(i, i) );
}
输出:
1
2
3
4
5
6
7
6
5
4
3
2
1
i和N可以任取,但必须N>=i
[/Quote]

这个确实实现了 能详细解释下吗?
Silitex 2009-11-23
  • 打赏
  • 举报
回复
为什么printf有返回值我却从来都不懂,很惭愧啊!
Silitex 2009-11-23
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 logiciel 的回复:]
17楼的可以简化、合并为一条语句:

C/C++ codeint p(int i,int N)
{return printf("%d\n", i)&& (N>i)&& (p(i+1,N)|| p(i, i));
}
[/Quote]
哇,太强了,真的可以简化!学习了!
CosmoKey 2009-11-20
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 logiciel 的回复:]
17楼的可以简化、合并为一条语句:

C/C++ codeint p(int i,int N)
{return printf("%d\n", i)&& (N>i)&& (p(i+1,N)|| p(i, i));
}
[/Quote]

[Quote=引用 9 楼 的回复:]
for(int j=i-N;j <=N-i;printf("/n/n%d",N-abs(j++)));
[/Quote]

[Quote=引用 12 楼 的回复:]
1==>i

for(j=i;j <=n*2-i;printf("%d ",(j++)-(j>n)*(j-n)*2 ));[/Quote]

学习了
logiciel 2009-11-20
  • 打赏
  • 举报
回复
17楼的可以简化、合并为一条语句:

int p(int i, int N) 
{
return printf("%d\n", i) && (N>i) && (p(i+1,N) || p(i, i));
}
g0tazu 2009-11-19
  • 打赏
  • 举报
回复
学习 强。。。。加油了。。。。
加载更多回复(20)

33,010

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧