轉(zhuǎn)載自神的blog
http://blog.csdn.net/vbvan/archive/2007/10/30/1857134.aspxFlexible C++
C++是一門(mén)非常靈活的語(yǔ)言,只要充分發(fā)揮你的想象, 再普通的東西都能玩出新花樣
1、1~1000求和
循環(huán)?遞歸?再簡(jiǎn)單不過(guò)的題目了。但是如果不允許你用判斷語(yǔ)句呢?
如果你熟悉switch的內(nèi)部實(shí)現(xiàn),那么你很容易想到使用函數(shù)指針數(shù)組。
#include <cstdio>
typedef int (*fun)(int);
int f1(int i) {return 0;}
int f2(int i) {fun f[2]={f1,f2}; return i+f[!!i](i-1);}
int main()
{
printf("%d\n",f2(1000));
}
2、輸出1,2,...,100,99,...,2,1
如果同樣不讓你用判斷語(yǔ)句呢?你仍然可以使用函數(shù)指針數(shù)組:
#include <cstdio>
typedef void (*fun)(int i,int n);
void f1(int i,int n);
void f2(int i,int n);
void f3(int i,int n);
void f1(int i,int n)
{
fun f[2]={f1,f2};
printf("%d\n",i);
f[i+1==n](i+1,n);
}
void f2(int i,int n)
{
fun f[2]={f2,f3};
printf("%d\n",i);
f[i==1](i-1,n);
}
void f3(int i,int n) {}
int main()
{
f1(1,100);
}
不過(guò)我們有更簡(jiǎn)潔的方法。
短路算法和逗號(hào)表達(dá)式粉墨登場(chǎng)了,一行搞定~
#include <cstdio>
void f(int i,int n)
{
printf("%d\n",i),(i<n)&&(f(i+1,n),printf("%d\n",i));
}
int main()
{
f(1,100);
}
posted on 2007-11-02 18:05
shifan3 閱讀(1364)
評(píng)論(3) 編輯 收藏 引用 所屬分類(lèi):
C++