一些看起来简单做起来难的程序员笔试面试题集锦
生活随笔
收集整理的這篇文章主要介紹了
一些看起来简单做起来难的程序员笔试面试题集锦
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1、判斷三個bool值中是否至少有兩個bool為真?
此題有幾種不同的解法
(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, ?:.
?
轉載于:https://www.cnblogs.com/xiongqiangcs/p/3955726.html
總結
以上是生活随笔為你收集整理的一些看起来简单做起来难的程序员笔试面试题集锦的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Unity3D 4.x 使用Mecani
- 下一篇: MongoDB 语法陷阱(转自51CTO