一些看起来简单做起来难的程序员笔试面试题集锦
2014-09-04 11:39
288 查看
1、判断三个bool值中是否至少有两个bool为真?
此题有几种不同的解法
(1)传统解法
(2)如果学过电路的可以考虑利用卡诺图化简
或者
(3) 使用异或运算 true ^ true = false; true^false = true; false^true = true; false^false = false;
(4)计数true的个数
2、通过增加或是修改一个字符,是下面c程序输出20个减号
此题主要考虑for循环的使用功底,由于输出20个减号,大致的程序都不变,要考虑怎么从for括号的循环条件修改
3、不用任何循环语句和条件语句,打印1到100的数
此题首先想到的是递归,但递归不是面试官想要的,面试官肯定会接着问 “还有其他方法吗?”
(1)利用构造函数实现,生成100个对象,即可以打印100次。
(2)利用模板特化的性质实现。
类似题目:求1+2+……+n,要求不能用以下符号:*, /, for, while, if, else, switch, case, ?:.
此题有几种不同的解法
(1)传统解法
bool leastTwo(bool a, bool b, bool c){ return (a&&b) || (b&&c) || (c&&a); }
(2)如果学过电路的可以考虑利用卡诺图化简
return a?(b || c) : (b && c);
或者
return a && (b || c) ||(b && c);
(3) 使用异或运算 true ^ true = false; true^false = true; false^true = true; false^false = false;
return a^b ? c : a;
(4)计数true的个数
return ((a?1:0)+(b?1:0)+(c?1:0)) >= 2;
2、通过增加或是修改一个字符,是下面c程序输出20个减号
int n = 20; for(int i = 0; i < n ; i --){ printf("-"); }
此题主要考虑for循环的使用功底,由于输出20个减号,大致的程序都不变,要考虑怎么从for括号的循环条件修改
for(int i = 0 ; -i < n; i --) for(int i = 0 ; i < n ; n--) for(int i = 0 ; i +n ; i -- )
3、不用任何循环语句和条件语句,打印1到100的数
此题首先想到的是递归,但递归不是面试官想要的,面试官肯定会接着问 “还有其他方法吗?”
(1)利用构造函数实现,生成100个对象,即可以打印100次。
class Printer { public: Printer() { static unsigned i=1; cout << i++ << endl; } }; int main() { Printer p[100]; }
(2)利用模板特化的性质实现。
template <int N> struct Print{ static void print(){ Print<N-1>::print(); printf("%d\n",N); } } template <> struct Print<1>{ static void print(){ printf("1\n"); } }
类似题目:求1+2+……+n,要求不能用以下符号:*, /, for, while, if, else, switch, case, ?:.
相关文章推荐
- 一些笔试面试题的简单汇总。持续更新。。。。。。
- 一些常用的php简单命令代码集锦
- 程序员面试题精选(32):金币概率问题(威盛笔试题)
- 微软笔试面试题集锦
- MTK笔试面试题集锦
- JAVA程序员笔试面试题汇总及答案 .
- 一些公司的笔试面试题
- 各大IT公司校园招聘程序猿笔试、面试题集锦
- 一些简单面试题
- 【集锦】编程时遇到的一些简单问题
- java面试题笔试题集锦
- 程序员面试题精选(39):一道autodesk笔试题求解
- [绝对原创]一些你们想不到的简单方法,就可以让你手机飞快起来!!!
- 想成为嵌入式程序员应知道的16个基本问题+一些面试题
- 一些常用的php简单命令代码集锦
- 一些微软 google IBM 笔试题 面试题
- 微软笔试面试题集锦
- java面试题笔试题集锦