送分。。。(抢答):)

one_add_one 2001-09-05 12:13:22
史密斯住在第十三号大街,这条大街上的房子的编号是从13号 到1300号。琼斯想知道史密斯所住的房子的号码。

  琼斯问道:它小于500吗? 史密斯作了答复,但他讲了谎话。

  琼斯问道:它是个平方数吗? 史密斯作了答复,但没有说真话。

  琼斯问道:它是个立方数吗? 史密斯回答了并讲了真话。

  琼斯说道:如果我知道第二位数是否是1,我就能告诉你那所房子的号码。

  史密斯告诉了他第二位数是否是1,琼斯也讲了他所认为的号码。

  但是,琼斯说错了。

  史密斯住的房子是几号?
...全文
139 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
yjf7888 2001-09-06
  • 打赏
  • 举报
回复
晚上忽然想起,我忽略了一个条件。
即:“琼斯说道:如果我知道第二位数是否是1,我就能告诉你那所房子的号码。 ”是解题的关键,说明这时琼斯已经确定了两个门牌号,而且其中一个第二位为1。
所以史密斯的前三个回答是N,N,Y,而最后一个只能回答N,如果回答为Y的话,实际上不存在这个门牌。琼斯回答1000。


所以最后应该是64。
林仪明 2001-09-06
  • 打赏
  • 举报
回复
来晚了
foreverps 2001-09-05
  • 打赏
  • 举报
回复
1000
Nepton 2001-09-05
  • 打赏
  • 举报
回复
我不敢肯定,答案不时729就是216,应该是729吧! XiXi 对么?



思维过程原稿:
I
琼斯问道:它小于500吗? 史密斯作了答复,但他讲了谎话。 yes -------> no
  琼斯问道:它是个平方数吗? 史密斯作了答复,但没有说真话。 no ----> yes
  琼斯问道:它是个立方数吗? 史密斯回答了并讲了真话。 yes ------> yes
  琼斯说道:如果我知道第二位数是否是1,我就能告诉你那所房子的号码。 yes
  史密斯告诉了他第二位数是否是1,琼斯也讲了他所认为的号码。
  但是,琼斯说错了。
  史密斯住的房子是几号?

216 ---> <500 && is not **2 && is **3 && 1 is nd ----> 729


II
琼斯问道:它小于500吗? 史密斯作了答复,但他讲了谎话。 no -------------> yes
  琼斯问道:它是个平方数吗? 史密斯作了答复,但没有说真话。 no ------> no
  琼斯问道:它是个立方数吗? 史密斯回答了并讲了真话。 yes -------------> yes
  琼斯说道:如果我知道第二位数是否是1,我就能告诉你那所房子的号码。 yes
  史密斯告诉了他第二位数是否是1,琼斯也讲了他所认为的号码。
  但是,琼斯说错了。
  史密斯住的房子是几号?
CyberUFO 2001-09-05
  • 打赏
  • 举报
回复
No. N!
  • 打赏
  • 举报
回复
正确就给人家分啊
one_add_one 2001-09-05
  • 打赏
  • 举报
回复
DIABL0(电脑破坏神)正确!

我的参考程序:

/*TC2.0调试通过*/

#include <stdio.h>

int cop(int i){
if (i<500) return 1;
return 0;
}

int sqr(int i){
int j;
for (j=1;j<i;j++)
if (j*j==i) return 1;
else if (j*j>i) break;
return 0;
}

int cub(int i){
int j;
for (j=1;j<i;j++)
if (j*j*j==i) return 1;
else if (j*j*j>i) break;
return 0;
}

int one(int i){
int j;
j=(i%100)/10;
if (j==1) return 1;
return 0;
}

int s[2][2][2][2];
int x[2][2][2][2];

main()
{
int i,j,a,b,c,d;
for (i=13;i<=1300;i++){
a=cop(i);
b=sqr(i);
c=cub(i);
d=one(i);
s[a][b][c][d]++;
x[a][b][c][d]=i;
}
for (a=0;a<2;a++)
for (b=0;b<2;b++)
for (c=0;c<2;c++)
for (d=0;d<2;d++)
if (s[!a][!b][c][d]==1 && s[!a][!b][c][!d]==1 && s[a][b][c][d]==1)
printf ("%d\n::%d,%d,%d,%d\n",x[a][b][c][d],a,b,c,d);
}
fsb_12345 2001-09-05
  • 打赏
  • 举报
回复
1000
yjf7888 2001-09-05
  • 打赏
  • 举报
回复
1000
因为琼斯作出了回答,所以根据史密斯的话是可以给出答案的(尽管其中有假话)。
所以应该排除根据史密斯的原话不能给出答案的组合。
根据史密斯原话可以给出答案的是Y,Y,Y,N;所以琼斯回答是64。但是史密斯真实回答应该是N,N,Y,N;所以门牌应该是1000。
starfish 2001-09-05
  • 打赏
  • 举报
回复
同意楼上。我来迟了,昨天晚上1:00的时候才看到这道题,今天刚想上来贴出答案谁知道已经有人解决了。

TO:老子
我在家里上网,现在已经大四,为什么问我什么时候军训呀?
DIABL0 2001-09-05
  • 打赏
  • 举报
回复
64

显然琼斯在第4步已经得到解决问题的办法,但是他需要知道第二位是否是1。虽然最后琼斯说错了,但其原因在于史密斯开始说了两句假话,而不是琼斯的推理错误。也就是说琼斯凭借史密斯告诉他的前三个条件得到了两个数,并且其中有一个第二位是1。从13至1300排除至2个数,史密斯的描述一定是大于500,不是平方数,是立方数。至此只剩下512与1000两个数。
不用考虑琼斯最后得到了哪一个数,把史密斯的话改成全正确的描述应该是:
小于500,是平方数,是立方数。
呵呵,还用说答案吗?
laozi 2001-09-05
  • 打赏
  • 举报
回复
to starfish:
是不是在网吧里上的网,你们什么时候军训啊!可别累坏身子。







yjf7888 2001-09-05
  • 打赏
  • 举报
回复
史密斯回答琼斯的话可能有以下几种情况:
1 N,Y,Y,N:琼斯的答案是729,而正确值可能是343或125或27;
2 N,N,Y,N:琼斯的答案是1000,而正确值是64;
3 Y,Y,Y,N:琼斯的答案是64,而正确值是1000;
4 N,Y,N,Y:琼斯的答案是1156,而正确值无法确定;
5 Y,Y,N,Y:琼斯的答案是81,而正确值是无法确定;
yjf7888 2001-09-05
  • 打赏
  • 举报
回复
我又觉得条件不足。
  史密斯可能回答琼斯以下几种组合:
 1 N,Y,Y,N:琼斯回答为729,但是正确答案可能为343或125或27;
2 N,N,Y,N:琼斯回答为1000,这时正确值为64;
3 Y,Y,Y,N:琼斯回答为64,这时正确值为1000;
4 N,Y,N,Y:琼斯回答为1156,这时无法确定正确答案。
5 Y,Y,N,Y:琼斯回答为81,这时无法确定正确答案。

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧