• 一些看起来简单做起来难的程序员笔试面试题集锦


    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);      
         }      
    }
    
    template <>
    struct Print<1>{
        static void print(){
             printf("1
    ");  
        }      
    }
    

      类似题目:求1+2+……+n,要求不能用以下符号:*, /, for, while, if, else, switch, case, ?:.

  • 相关阅读:
    Spock
    Spock
    Spock
    Spock
    Spock
    Spock
    Python3 与 Python2 的不同
    python 文件处理
    Django 数据迁移
    Python 特殊方法
  • 原文地址:https://www.cnblogs.com/xiongqiangcs/p/3955726.html
Copyright © 2020-2023  润新知