在某神牛的群里面看见的:
趣味题:编写原型为int foo(int i, int n)的c函数,实现打印i,i+1,…,n-1,n,n-1,…,i+1,i的序列。要求函数内只能有一条语句,只能有一个分号,只能有一个printf,并且只能用这个printf输出。不允许使用if、else、do、for、while、goto关键字。
于是我想出了一个i不管用的方法
int foo(int i,int n) { return (i<2*n?printf("%d ",(i<n?i:2*n-i))+foo(i+1,n):0); }
但是这个肯定不是真正的答案,
于是小虾实现了一个方法, http://xiaoxia.org/?p=4427
iceboy公布了答案 return i < n && foo(i, i) && foo(i + 1, n), printf(“%d “, i); 但是很难明白。
Mine is:
return i==n && printf(“%d “, i) || (foo(i, i), i<n && foo(i+1, n), foo(i, i));
是不是觉得我的最容易理解? 哈哈哈哈!!!
orz!