随笔 - 31  文章 - 128  trackbacks - 0
<2007年11月>
28293031123
45678910
11121314151617
18192021222324
2526272829301
2345678

常用链接

留言簿(5)

随笔分类(38)

随笔档案(31)

收藏夹(4)

College

High School

最新随笔

搜索

  •  

积分与排名

  • 积分 - 54264
  • 排名 - 408

最新评论

  • 1. re: [yc]详解link
  • 面试的时候面试官就问过我什么是编译和链接,我说编译就是把代码文件生成目标文件,链接就是把目标文件生成可执行文件,他说不对,又问我什么是动态链接,还问我预编译都做什么处理。。。都在这里找到了答案!!!!
  • --王至乾
  • 2. re: [yc]详解link
  • @刘伟
    我是说博主,不是叫你啊
  • --溪流
  • 3. re: [yc]详解link
  • 谁是石老师,我不是哈@溪流
  • --刘伟
  • 4. re: [yc]详解link
  • 石老师?我是溪流~
  • --溪流
  • 5. re: [yc]详解link
  • 期待楼主下文啊,多谢楼主了
  • --刘伟

阅读排行榜

评论排行榜

转载自神的blog
http://blog.csdn.net/vbvan/archive/2007/10/30/1857134.aspx

Flexible C++

C++是一门非常灵活的语言,只要充分发挥你的想象, 再普通的东西都能玩出新花样

1、1~1000求和
循环?递归?再简单不过的题目了。但是如果不允许你用判断语句呢?
如果你熟悉switch的内部实现,那么你很容易想到使用函数指针数组。

#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
如果同样不让你用判断语句呢?你仍然可以使用函数指针数组:

#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);
}

不过我们有更简洁的方法。
短路算法和逗号表达式粉墨登场了,一行搞定~

#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 阅读(1332) 评论(3)  编辑 收藏 引用 所属分类: C++

FeedBack:
# re: 神意不是凡人能领会的(1) 2007-11-22 18:47 gbb21
1-100-1好玩
void Print(int Begin)
{
static int P[2] = {*(&Begin - 1), *(&Begin - 1) - 5};
static int Offset = -198;
printf("%d\t", Begin++ - (Offset & ~(Offset >> 31)));
Offset += 2;
*(&Begin - 1) = P[!!(Begin - 200)];
}

int main()
{
Print(1);
}  回复  更多评论
  
# re: 神意不是凡人能领会的(1) 2007-11-22 19:58 van
油菜~
不过Offset>>31的结果是实现相关的,hoho  回复  更多评论
  
# re: 神意不是凡人能领会的(1) 2008-08-26 19:55 littlewater
先算完  回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理