一个变态C/C++面试题的变态解法
来源:互联网 发布:mac的pages怎么转word 编辑:程序博客网 时间:2024/04/29 18:47
转自: http://blog.csdn.net/whinah/article/details/6130434
这是源自某论坛的一个问题,原帖如下(#########分隔)
############################################################################
屏幕上打印1-1000这1000个数, 不许使用循环语句/条件语句,不许使用?:算符。
不许在源代码中用列举输出语句的办法傻打,比如一千个printf语句不行
一个cout后面跟上1-1000这样的也不行, 不再赘述其他傻打行为, 大家都能领会精神。
结果,出了好多千奇百怪的答案, 下面举一个例子
view plain
- void myprint(int n)
- {
- printf("%d/n",n);
- int t=1/(n-1000);
- myprint(n+1);
- }
- void main()
- {
- myprint(1);
- }
############################################################################
上面这个解法使用的是自动报错(divide by zero)从而退出,严格讲,这样的代码是错误的。
我在这里给两个正确的:
1. 使用函数指针数组
view plain
- #include <stdio.h>
- void dummy(int x) {}
- void myprint(int x)
- {
- void (*pfa[])(int) = {myprint, dummy};
- printf("%d/n", x);
- pfa[x/1000](x+1);
- }
- int main(int argc, char* argv[])
- {
- myprint(1);
- return 0;
- }
2. 使用模板递归
view plain
- #include <stdio.h>
- template<int x> struct P {
- void prt() {
- printf("%d/n", 1000-x+1);
- P<x-1>().prt();
- }
- };
- template<> struct P<0> { void prt() {} };
- int main(int argc, char* argv[])
- {
- P<1000>().prt();
- return 0;
- }
=============================================
从网上搜出其他的解决办法:
1. 构造函数(也可以使用析构函数,一样的道理)
view plain
- struct Printer
- {
- Printer() { static unsigned i=1; cout << i++ << endl;; }
- };
- int main()
- {
- Printer p[1000];
- }
2. 最变态的一个(虽然代码不是很严格):
view plain
- void main(int j) {
- printf("%d/n", j);
- (main + (exit - main)*(j/1000))(j+1);
- }
大家可以大胆发挥想象力,寻求更变态的解决办法
- 一个变态C/C++面试题的变态解法
- 一个变态C/C++面试题的变态解法
- 一个变态C/C++面试题的变态解法(要码农背景) zz
- 一道变态的面试题
- 变态的微软面试题
- 一道变态的面试题
- 变态面试题
- Java 变态面试题
- 一道变态的面试题的求解
- 微软经典变态的面试题
- JavaScript中一些变态的面试题
- C语言中宏定义的一个变态用法
- C语言中宏定义的一个变态用法
- C语言中宏定义的一个变态用法
- C语言中宏定义的一个变态用法
- C语言中宏定义的一个变态用法
- C语言中宏定义的一个变态用法
- [转贴]变态的C自增
- TCP UDP Socket流程
- 软件进行局域网备份SQL数据库的方法!
- smarty嵌套循环
- 正则表达式元字符列表
- zoj 1406 Jungle Roads
- 一个变态C/C++面试题的变态解法
- 软件测试用例的基本要素
- js弹出提示框
- svn在linux下的使用(svn命令)
- 使用WCF更新数据
- js 离开当前页面 提示
- [shell]在线安装memcache的脚本
- 如何拖动文件到python脚本中作为输入参数?
- LIB和DLL的区别与使用