首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

微软面试题//addknow、plusknow、plusknow2诀别是什么判断啥的

2013-10-16 
微软面试题//addknow、plusknow、plusknow2分别是什么判断啥的?已知两个数字为1~30的,甲知道两数的和,乙知道

微软面试题//addknow、plusknow、plusknow2分别是什么判断啥的?
已知两个数字为1~30的,甲知道两数的和,乙知道两数的积,甲问乙:“你知道是那两个数吗?”乙说:“不知道”。乙问甲:“你知道是那两个数吗?”甲说:“也不知道”。于是,乙说 :“那我知道了”随后甲也说:“那我也知道了”这两个数是'什么? (无意间看到这个面试题 我看了半天 毫无头绪 大家来解答解答这个题吧 集思广益 c/c++/java 均可 最好先把程序思想用文字说一下)


#include <stdio.h>

bool PlusKnow(int value)
{
int c = 0;
int cyc = value < 30 ? value : 30;
for (int i = 1; i <= cyc; i++)
{
if (value % i == 0 && i <= value / i && value / i <= 30)
c++;
}

return (c == 1);
}

bool AddKnow(int value)
{
int c = 0, j = 0;
int cyc = value / 2;
for (int i = 1; i <= cyc; i++)
{
j = value - i;

if (j <= 30 && !PlusKnow(i * j))
c++;
}

return (c == 1);
}

bool PlusKnow2(int value)
{
int c = 0;
int cyc = value < 30 ? value : 30;

for (int i = 1; i <= cyc; i++)
{
if (value % i == 0 && i <= value / i && value / i <= 30)
{
if (!AddKnow(i + (value / i)))
c++;
}
}

return (c == 1);
}

int main(int argc, char* argv[])
{
int a, b, x, y;

for (a = 1; a <= 30; a++)
{
for (b = a; b <= 30; b++)
{
x = a + b;
y = a * b;

if (!PlusKnow(y) && !AddKnow(x) && PlusKnow2(y))
printf("%d\t%d\n", a, b);
}
}

getchar();

return 0;
}

[解决办法]
是这个吗?2+2 =2*2

热点排行