智力题(第二集)

问题一:如何快速找出一个32位整数的二进制表达里有多少个”1”?用关于”1”的个数的线性时间?

答案:错误答案是

while(x){if(x&0x1)count++;x>>=1;}//当x为负数,那么这就是一个无限循环。

正确解答是:

while(x){x=x&(x-1);count++;}//这里就是最好的解答,并别x中有多少1就会循环几次,

效率高。

问题二:

用线性时间和常数附加空间将一个长度为n的字符串向左循环移动m位(例如,”abcdefg”移动3位就变成了”defgabc”)。

答案:把字符串切成长为m和n-m的两半。将这两个部分分别逆序,再对整个字符串逆序。

分析:这个方案的总共需要交换n次,如果换作另一种思路,m位m位向右移动,最好情况会比这种方法少

移动m位,最坏情况多移动(m-n%m)*m-m次。

#include <iostream>
#include <string.h>
using namespace std;
void runleftstring(char *ptr,int x)
{
    int n = strlen(ptr);
    int i=0;
    int j=n-1;
    char tmp;
    while(i<j)
    {
        tmp = ptr[i];
        ptr[i]=ptr[j];
        ptr[j]=tmp;
        i++;
        j--;
    }
    int mid = n - x-1;
    j=mid;
    i=0;
    while(i<j)
    {
        tmp = ptr[i];
        ptr[i]=ptr[j];
        ptr[j]=tmp;
        i++;
        j--;
    }
    i=mid+1;
    j=n-1;
    while(i<j)
    {
        tmp = ptr[i];
        ptr[i]=ptr[j];
        ptr[j]=tmp;
        i++;
        j--;
    }
}
int main()
{
    char s[]="abcdefg123456789";
    runleftstring(s,5);
    cout<<s<<endl;
    return 0;
}

第三题:

给出一行C语言表达式,判断给定的整数是否是一个2的幂。

答案:if(x&(x-1)==0)那么这个整数就是2的幂。

分析:1,10,1000,10000,100000,1000000,2的幂就是2的n次方,那么就只能有一位是1,

其他位就必须是0,所以有x&(x-1)==0判断这个数是不是2的幂。

第四题:

考虑一个双人游戏。游戏在一个圆桌上进行。每个游戏者都有足够多的硬币。他们需要在桌子上轮流放置硬币,

每次必需且只能放置一枚硬币,要求硬币完全置于桌面内(不能有一部分悬在桌子外面),并且不能与原来放

过的硬币重叠。谁没有地方放置新的硬币,谁就输了。游戏的先行者还是后行者有必胜策略?这种策略是什么?

答案:先行者在中心放一枚硬币,以后方的硬币总是与后行者相对称的地方,这样只要后行者有地方放,那么先

行者必有地方放。策略先行者必胜。

第五题:

如果叫你从下面两种游戏中选择一种,你选择哪一种?为什么?

a. 写下一句话。如果这句话为真,你将获得10美元;如果这句话为假,你获得的金钱将少于10美元

或多于10美元(但不能恰好为10美元)。

b. 写下一句话。不管这句话的真假,你都会得到多于10美元的钱。

答案:选择第一种游戏,写下:“我既不会得到10美元,也不会得到1000000000美元”.

分析:1.假设这句话是真话,a选项中如果这句话为真就获得10美元,但是我的这句话是我不会得到10美元

矛盾,所以不成立。

2.假设这句话是假话,a选项中如果这句话是假话会获得不等10美元,满足我既不会得到10美元这句话,

但是如果想我写的话是假话,那么只有第二句话是真话了,于是我将得到1000000000美元。

第六题:

某种药方要求非常严格,你每天需要同时服用A、B两种药片各一颗,不能多也不能少。这种药非常贵,你不

希望有任何一点的浪费。一天,你打开装药片A的药瓶,倒出一粒药片放在手心;然后打开另一个药瓶,

但不小心倒出了两粒药片。现在,你手心上有一颗药片A,两颗药片B,并且你无法区别哪个是A,哪个是B。

你如何才能严格遵循药方服用药片,并且不能有任何的浪费?

答案:将手心里面的药片每一片从中间分开,分成两堆,再取一片A药也分成2份,分别放置两堆中,每次服用

时只取一堆就OK。

分析:本来是服用1片A与1片B就刚好,可是多了1片B,将原来一堆的药片都从中间分开分成2堆,于是我们再取

1片A分成2片分别放入两堆里面,就可以求出来。

第七题:

一个圆盘被涂上了黑白二色,两种颜色各占一个半圆。圆盘以一个未知的速度、按一个未知的方向旋转。

你有一种特殊的相机可以让你即时观察到圆上的一个点的颜色。你需要多少个相机才能确定圆盘旋转的方向?

答案:控制相机绕圆盘中心顺时针移动,观察颜色多久变一次;然后让相机以相同的速度逆时针绕着圆盘中心移动,

再次观察变色的频率。可以断定,变色频率较慢的那一次,相机的转动方向是和圆盘相同的。

第八题:

地球上有多少个点,使得从该点出发向南走一英里,向东走一英里,再向北走一英里之后恰好回到了起点?

答案:传统答案是在北极点。实际上这个题的答案是无穷多个,距离南极点1+1/(2π)位置,此位置往

南走1英里,则r=1/2π,周长d=2πr=1,刚好等于要往东走的英里,于是又回到1/2π的位置,再往北走1就回到

了原点,依次类推,其实在1+1/(2kπ)(k=1,2,3,4….)的位置都可以回到原点。(pai把我纠结的)

第九题:

一对夫妇邀请N-1对夫妇参加聚会(因此聚会上总共有2N人)。每个人都和所有自己不认识的人握了一次手。

然后,男主人问其余所有人(共2N-1个人)各自都握了几次手,得到的答案全部都不一样。假设每个人都认识自己的配偶,

那么女主人握了几次手?

答案:N-1

分析:有2N-1个人,且他们握手次数都不相同,因为不可能跟自己握手,那么握手的范围是0-(2N-2),如果第一对夫妻中

的女士握手0次,那么该对夫妻中的男士可以握手2N-2次,第二对夫妻中的女士要跟第一对夫妻中的男士握手,那么第二对、

夫妻中的女士握手1次,该对夫妻中的男士握手2N-3次。。。以此类推,直到握过N-2次手的人和握过N次手的人配成一对。

此时,除了男主人及其配偶以外,其余所有人都已经配对。根据排除法,最后剩下来的那个握手次数为N-1的人就是女主人了。

第十题:

如何选择4个砝码可以称出40g以内的所有质量。

答案:1,3,9,27

分析:首先选择1g作为开始,这样我有了一个1g的砝码,我可以表示的质量范围是-1g到1g,我无法表示2g,于是,为了表示2g

的质量,我选择3g,因为3-1=2,为什么这样做?这样做是为了让我的可以表示范围更大一些,有了1,3我们可以表示的范围

是1到4g,同样无法表示5g,于是我们再取9g,5=9-4,这样就可以组合得到5g的表示,从而是取值范围最大化的呈现,此刻能

表示的大小范围是1-13,同理,表示到13已经是极限了,无法表示14g,于是我们选择27,因为27-13=14,刚好表示,此刻可以

表示的范围是1-40g,就是我们要求的结果。

时间: 2024-09-29 17:26:51

智力题(第二集)的相关文章

2018 FJUT acm校赛 b题 第二集:以后我就叫你小蛤了

第二集:以后我就叫你小蛤了 TimeLimit:1000MS  MemoryLimit:128MB 64-bit integer IO format:%lld Problem Description "小蛤啊,对了以后我就叫你小蛤了,你给的题完全没有难度啊" "哼,你别得意,让你碰巧做出来了而已,接下来这题你绝对不可能做出来的,你要是做出来了balabalabala...." "行了行了,快说题目吧,我时间宝贵啊!" 小A心急如焚,想尽快知道小C

智力题小结(2)

1.你在一幢100层大楼下,有21根电线线头标有数字1..21.这些电线一直延伸到大楼顶,楼顶的线头处标有字母A..U.你不知道下面的数字和上面的字母的对应关系.你有一个电池,一个灯泡,和许多很短的电线.如何只上下楼一次就能确定电线线头的对应关系? 答案:在下面把2,3连在一起,把4到6全连在一起,把7到10全连在一起,等等,这样你就把电线分成了6个"等价类",大小分别为1, 2, 3, 4, 5, 6.然后到楼顶,测出哪根线和其它所有电线都不相连,哪些线和另外一根相连,哪些线和另外两

智力题:1-28题

1.你让工人为你工作7天,给工人的回报是一根金条.金条平分成相连的7段 ,你必须在每天结束时给他们一段金条,如果只许你两次把金条弄断,你如何给你 的工人付费? 答案:分成1/7,2/7,4/7,因为1,2,4可以组合成1-7的任何一个数字. 2.请把一盒蛋糕切成8份,分给8个人,但蛋糕盒里还必须留有一份. 答案:面对这样的怪题,把切成的8份蛋糕先拿出7份分给7人,剩下的 1份连蛋糕盒一起分给第8个人. 3.小明一家过一座桥,过桥时是黑夜,所以必须有灯.现在小明过桥要1秒, 小明的弟弟要3秒,小明

java面试智力题

智力题,每个正式的笔试.面试都会出,而且在面大企业的时候必然会问到,笔者曾在很多面试中,都被问到过,不过答得都不是很好,因为时间很短,加上我们有时候过于紧张,所以做出这类问题,还是有一定的难度,从这篇文章中我会总结一些常见的智力题,希望各位读者能在本章所列的题中找出做这类题的方法,克服面试中的难题! 1.农民分金条问题 题目:你让农民为你工作7天,给他的回报是一根金条.金条平分成相连的7段,你必须在每天结束时给他们一段金条,如果只许你两次把金条弄断,你如何 给你的工人付费,保证该农民在七天中任意

经典智力题:火车运煤

题目描述如下: 你是一个煤老板,你在矿区开采了3000吨煤,需要运送到市场上去卖,从你的矿区到市场有1000公里,你手里有一列以煤为动力的火车,这个火车一次最多能运1000吨煤,火车每公里消耗一吨煤.问如何运送才能运最多的煤到集市? ========== -.- ========== 思考时间 ========== -.- ========== 从题中很容易能看出一个矛盾:路程是1000公里,最多运1000吨煤,显然不能直接走.如果直接走的话,不仅没有煤能送过去,而且还会剩下一大堆煤在原地.所以

脑洞打开,智力题

1,有50个球,你和你的对手轮流取,你先开始,每次最多取6个,最少取1个,问你怎么可以保证自己一定可以得到最后一个球? 2,两个机器人,初始时位于数轴上的不同位置.给这两个机器人输入一段相同的程序,使得这两个机器人保证可以相遇.程序只能包含“左移n个单位”.“右移n个单位”,条件判断语句If,循环语句while,以及两个返回Boolean值的函数“在自己的起点处”和“在对方的起点处”.你不能使用其它的变量和计数器. 3,某种药方要求非常严格,你每天需要同时服用A.B两种药片各一颗,不能多也不能少

智力题小结(4)

1. 某城市发生了一起汽车撞人逃跑事件,该城市只有两种颜色的车,蓝15%绿85%,事发时有一个人在现场看见了,他指证是蓝车,但是根据专家在现场分析,当时那种条件能看正确的可能性是80%那么,肇事的车是蓝车的概率到底是多少? 答案: 设看到蓝车为事件A 看到绿车为事件B 看正确为事件C 看错误为事件D 所求为发生事件C的情况下A发生 P(C|A)=P(CA)/P(A)=P(A)P(C|A)/[P(A)P(C|A)+P(B)P(D|B)] =15%*80%/(15%×80%+85%×20%) 2.

智力题研究二

[IT思想类] 1. 有1000瓶水,其中有一瓶有毒,小白鼠只要尝一点带毒的水24小时后就会死亡,至少要多少只小白鼠才能在24小时时鉴别出那瓶水有毒?(中级) 2. 共有三类药,分别重1g,2g,3g,放到若干个瓶子中,现在能确定每个瓶子中只有其中一种药,且每瓶中的药片足够多,能只称一次就知道各个瓶子中都是盛的哪类药吗? 如果有4类药呢?5类呢?N类呢(N可数)?(高级) 如果是共有m个瓶子盛着n类药呢(m,n为正整数,药的质量各不相同但各种药的质量已知)?你能只称一次就知道每瓶的药是什么吗?

算法工程师&lt;数学题/智力题&gt;

<数学题/智力题> 1.如果一个女生说,她集齐了十二个星座的前男友,我们应该如何估计她前男友的数量? https://blog.csdn.net/FnqTyr45/article/details/80248927 2.如何理解矩阵的秩? https://www.zhihu.com/question/21605094 3.矩阵低秩的意义? https://www.zhihu.com/question/28630628 4.如何理解矩阵特征值? https://www.zhihu.com/ques

NanUI for Winform 使用示例【第二集】——做一个所见即所得的Markdown编辑器

经过了这一个多星期的调整与修复,NanUI for .NET Winform的稳定版已经发布.应广大群友的要求,现已将NanUI的全部代码开源. GitHub: https://github.com/NetDimension/NanUI Release: https://github.com/NetDimension/NanUI/releases 这次发布的是一个相对稳定的版本,解决和改善了如下问题: 页面随机白屏问题(主要原因是GC自动回收后,造成内存地址不可读) NanUI编译版本改为.NE