zoukankan      html  css  js  c++  java
  • 第八题各小题汇总 【微软面试100题 第八题】

    题目1:

      有两个房间,一房间里有三盏灯,另一房间里有控制着这三盏灯的三个开关,这两个房间是分割开的,从一间里不能看到另一件的情况。现在要求受训者分别进这两间房一次,然后判断出这三盏灯分别是由哪个开关控制的。

      分析:通过温度来解决。

    题目2:

      你让一些人为你工作了七天,你要用一根金条作为报酬。金条被分成七小块,每天给出一块。如果你能将金条切割两次,你怎样分给这些工人?

      分析:1+2+4.

    题目3:

      用一种算法来颠倒一个单链表。

      可以通过画图来验证方法1和方法2。

    typedef struct NodeList
    {
        struct NodeList *next;
        int data;
    }NodeList;
    View Code

      方法1:递归 

    NodeList *reverseList(NodeList *head)
    {
        if(head==NULL || head->next==NULL)
            return head;
        NodeList *tmp = reverse(head->next);
        head->next->next = head;
        head->next = NULL;
    
        return tmp;
    }
    View Code

      方法2:非递归

    NodeList *reverseList(NodeList *head)
    {
        if(head==NULL)
            return NULL;
    
        NodeList *h1,*h2;
    
        h1 = head->next;
        head->next = NULL;
        while(h1)
        {
            h2 = h1;
            h1 = h1->next;
            h2->next = head;
            head = h2;
        }
        return h2;
    }
    View Code

    题目4:

      不用乘法或加法增加8倍。现在用同样的方法增加7倍。

      分析:n<<3  (n<<3)-n

    题目5:

      假设你有一个用1001个整数组成的数组,这些整数是任意排列的,但是你知道所有的整数都在1到1000(包括1000)之间。此外,除一个数字出现两次以外,其他所有数字只出现一次。假设你只能对这个数组做一次处理,用一种算法找出重复的那个数字。如果你在运算中使用了辅助的存储方式,那么你能找到不用这种方式的算法吗?

      分析:

        方法1:根据等差数列求和公式:n*(n+1)/2得,sum-1000*(1000+1)/2 = result(其中sum是整个数组的和,result是出现两次的那个数字).

        方法2:根据题意,1~1000中只有一个数字出现了两次,其他都出现了一次。则在原数组中再加入1~1000,就成了只有一个数字出现了三次,其他数字都出现了两次,可以用异或来解决.

    方法2代码:

    int findX(int *a)
    {
        int k = a[0];
        for(int i=1;i<=1000;i++)
        {
            k ^= i;
            k ^= a[i];
        }
        return k;
    }
    View Code
  • 相关阅读:
    (转)3D模板阴影原理
    (转)c++模版:包含模型、显式实例化、分离模型
    (转)C++内存管理
    (转)Ogre 安装 配置 问题
    (转)详细解说hash_map
    (转)STL中map用法详解
    VB Format函数
    转 python内置正则表达式(re)模块官方文档简要中文版
    《编程的奥秘》读后感
    python基础(5)正则表达式
  • 原文地址:https://www.cnblogs.com/tractorman/p/4054575.html
Copyright © 2011-2022 走看看