半夜睡觉前和舍友聊天,舍友说了一道腾讯面试题,大概是这样的:
从1到30中取出两个数(可以重复),我们把两个数的和告诉甲,俩个数的积告诉乙,然后甲乙之间有如下对话:
甲:我不知到这两个数,但是我肯定你也不知道!
乙:我本来不知道,但是现在我知道了!
甲:那个我也知道了!!
卧槽!这他喵的什么面试题?完了不百度一下影响睡眠!!!!
手机百度之~~原来这个题还是有点来头的!!跟一个叫做“鬼谷子问图”逻辑题很相似,但是它是从2到99中选两个数!百度百科有详细解答!
但是,上面腾讯的面试题似乎有些变换,按照百科中的思路没法得到结果,不知道是题目叙述的有问题还是什么的!
这是,鬼谷子问徒的解:
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
//甲的得到的数字只能是下面几种
int S[10000];
bool IsPrime(int number)
{
number = abs(number);
if (0 == number || 1 == number)
return true;
int divisor=(int)sqrt((double)number);
while(number%divisor != 0)--divisor;
return 1 == divisor;
}
int GetS()
{
int n=0,s,flag;
for(s=5;s<57;s+=2)
{
flag=true;
for(int x=2;x<=s/2;x++)
{
if(IsPrime(x)&&IsPrime(s-x))
{
flag=false;
break;//俩个数都是质数,一定不是甲手中的数
}
}
if(flag)
S[n++]=s;
}
return n;
}
int main(int argc,ch