1.用10只小老鼠找出1000瓶药中的一瓶毒药。
1)用二进制对毒药进行编码,2的10次方=1024>1000瓶药。
2)每个小老鼠代表一位,吃自己那一位上有编码的药。
3)最后统计死去的老鼠属于哪一位,合成二进制码。
2.一辆大巴,20个乘客,10个车站,有乘客下车才停,等概率下车,求停车的期望。
每一位乘客每一站下车的概率为1/10
20名乘客在某一站都不下车的概率(9/10)20次方
大巴在某一站需要停车的概率1-(9/10)20次方
停车记为1,不停车记为0,某一站停车的期望1*(1-(9/10)20次方)
10站停车的期望10*(1-(9/10)20次方)=8.78
由公式可知,人越多,10站停车的期望越大,越接近10.
3.找到数组中出现频率大于一半的数
#include<iostream>
using namespace std;
int len;
int main()
{
cin >> len;
int a;
int nTimes;
int candidate;
for (int i = nTimes = 0; i < len; i++)
{
cin >> a;
if (nTimes == 0) candidate = a, nTimes = 1;
else
{
if (candidate == a) nTimes++;
else nTimes--;
}
}
cout << candidate;
//system("pause");
return 0;
}
//刚好一半的数是找不出来的,2 1 3 2---3 2 1 2 3---2,刚好一半与输入的位置相关
4.一串数字,只有一个数只出现了奇次,其余都是偶次,找出这个数。
使用异或的思想,两个相同的数异或结果为0,不同为1 ,根据该规则下列过程如下
假设 数组为 2,3,2,3,4,1,4
那么结果应该为1
2 ^ 3 = 0010 ^ 0011 = 0000 0001 1
1 ^ 2 = 0001 ^ 0010 = 0000 0011 3
3 ^ 3 = 0011 ^ 0011 = 0000 0000 0
0 ^ 4 = 0000 ^ 0100 = 0000 0100 4
4 ^ 1 = 0100 ^ 0001 = 0000 0101 5
5 ^ 4 = 0101 ^ 0100 =0000 0001 1
整个过程如上,最后结果为1
class Solution {
public:
int singleNumber(int A[], int n) {
if(A == NULL || n <= 0)
return 0;
int num = 0;
for(int i = 0;i<n;i++)//i++ ++i都不影响结果
{
num = num ^ A[i];
}
return num;
}
};
本文是作为个人总结学习记录,侵删