一道智力题,送给大家做圣诞小礼物

llrock 2002-12-23 01:17:47
一道智力题,送给大家做圣诞小礼物,希望大家用JS代码得出结果,只要分析出正确结果,都给分,希望大家能用Js给出分析代码.

圣诞节快乐!我爱JS论坛。
========================================================================
一个经理有三个女儿,三个女儿的年龄加起来等于13,三个女儿的年龄乘起来等于经理自己的年龄,有一个下属已知道经理的年龄,但仍不能确定经理三个女儿的年龄,这时经理说只有一个女儿的头发是黑的,然后这个下属就知道了经理三个女儿的年龄。请问三个女儿的年龄分别是多少?为什么?
...全文
65 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
llrock 2002-12-23
  • 打赏
  • 举报
回复
TO:秋水姐
======================
<script>
for(i=1;i<=4;i++)//13/3=4
for(j=i;j<=6;j++){//(13-1)/2=6
k=13-i-j;
s=i*j*k
if(k<j||s-k<20||s-k>40)continue;
document.write(i,",",j,",",k,"=",s,"<br>")
}
</script>
================
你那里有一个问题,就时if(...||s-k>40)你是想排除40岁后生孩子的情况,但是2,3,8=48却未达到期望目的,应该改成(Math.min(i,j,k))>40
====
还有就时你的答案是哪个?:)
不知道我理解得对不,
=========================================================
meizz(梅花雨) 哥哥

我去年工作的第一个月的工资卖了内存,那个时候512的只有200人民币,爽死了,40G硬盘600多块钱,今年又加了一会80的,没办法机器上的东西太多了,大多是音乐,呵呵,我喜欢音乐,尤其是班得瑞的,我羡慕你的星星呀,象你学习!
======================
所有人圣诞快乐呦!平安夜好好过,我决定去喝酒。:)

llrock 2002-12-23
  • 打赏
  • 举报
回复
回复人: meizz(梅花雨) ( ) 信誉:144 2002-12-23 13:40:00 得分:0


按那种类推,应该只有(2、2、9)与(2、3、8)这两组答案比较符合。
而题中说只有一位黑头发,那另两个是双胞胎更为合理些。
====================
TO:meizz(梅花雨)
我觉得她的那个解法没有注意到 父亲年龄确定但无法判断的一对多的条件。

====================
to:ahui_net(阿灰)
我觉得这道题应该分两部分,第一部分不考虑黑头发的条件,因为这是最后得出答案的条件,再不考虑这个条件的情况下找出最有可能的组合,如果任就找不到正确答案材应该使用这个模糊的条件。因为我们不确定黑色代表什么,直到最后得出166 229时候才应该认为黑色提示了年龄。
llrock 2002-12-23
  • 打赏
  • 举报
回复
这是我最初的解法,答案时229,
===========================================================================

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
</HEAD>

<BODY>
<HR>
基于条件:<BR>
1、三个女儿的年龄加起来等于13<BR>
2、三个女儿的年龄乘起来等于经理自己的年龄<BR>
3、不可能20之前生育,和不可能45岁之后生育(我想这个经理不是亚当,他妻子也不是夏娃)<BR>
=====〉得到下列解<BR><BR>
<SCRIPT LANGUAGE="JavaScript">
<!--
function disp(r){
var str='<table width=250 border="1"><tr><td>父亲</td><td>女儿1</td><td>女儿2</td><td>女儿3</td></tr>'
for(i=0;i<r.length;++i){
str+='<tr><td>'+r[i].farther+'</td>';
str+='<td>'+r[i].dau1+'</td>';
str+='<td>'+r[i].dau2+'</td>';
str+='<td>'+r[i].dau3+'</td></tr>';
}
str+='</table>';
document.write(str);
}

//--------------------------------------------------
var dau1,dau2,dau3,farther;
var results=new Array();
var tmp_results=new Array();

for(dau1=1;dau1<=2;++dau1)//假定dau1最小,由于平均年龄是4.333333,因此dau1<=4
{
/*由于dau2不可能出现1,1,11的情况,又dau2比dau1大,所以dau2从2开始枚举&&当dau2不可能大于(dau2+dau3)/2,当dau1=1时dau2区的最大值6*/
for(dau2=2;dau2<=6;++dau2)
{
dau3=13-dau1-dau2;
farther=dau1*dau2*dau3;
if((farther-dau1)<60//排除45岁之后生dau1的可能性
&&(farther-(dau2>dau3?dau2:dau3))>20)//排除20岁之前生育的可能性
{
tmp=new Array();
tmp.dau1=dau1;
tmp.dau2=dau2;
tmp.dau3=dau3;
tmp.farther=farther;
tmp_results[tmp_results.length]=tmp;
}
}
}
disp(tmp_results);
//-->
</SCRIPT>
<HR>
基于条件:<BR>
1、当经理年铃为常数(已知)时答案不唯一(这意味着当经理年龄为定值时存在多于一种情况的组合,因此排除磕确定的所有解)<BR>
=====〉得到下列解<BR><BR>
<SCRIPT LANGUAGE="JavaScript">
<!--
var count;//用于计数
for(i=0;i<tmp_results.length;i++){
bool=0;
for(j=0;j<tmp_results.length;j++){
if(tmp_results[i].farther==tmp_results[j].farther)count++;
}
if(count>1)results[results.length]=tmp_results[i];
count=0;
}
disp(results)
//-->
</SCRIPT>
<HR>
基于条件:<BR>
1、这时经理说只有一个女儿的头发是黑的(显然对于只有一岁的婴儿,我们无法判断她的头发是什么颜色,而且只有一个黑色)<BR>
<BR>
于是我们得到最终结论:这个经理大女儿9岁,后两个只有2岁。<BR>
<font color=red>***这并不与我们做的假设dau2>dau1矛盾,因为dau1从1岁开始,dau2从2岁开始枚举。</font>
圣诞节快乐!
</BODY>
</HTML>
==================================================================
这是我第二个解法,结果还是229
============================
<SCRIPT LANGUAGE="JavaScript">
<!--
function disp(r){
var str='<table width=250 border="1"><tr><td>父亲</td><td>女儿1</td><td>女儿2</td><td>女儿3</td></tr>'
for(i=0;i<r.length;++i){
str+='<tr><td>'+r[i][0]+'</td>';
str+='<td>'+r[i][1]+'</td>';
str+='<td>'+r[i][2]+'</td>';
str+='<td>'+r[i][3]+'</td></tr>';
}
str+='</table>';
document.write(str);
}
//-->
</SCRIPT>
<SCRIPT LANGUAGE="JavaScript">
<!--
var dau1,dau2,dau3,farther
var results=new Array();

for(farther=20;farther<100;++farther){//父亲从20~100
for(dau1=1;dau1<=4;++dau1){//至少有一个女儿的年龄不会大于父亲年龄的立方根4,
for(dau2=1;dau2<=Math.sqrt((farther/dau1));++dau2){//dau2不会大于farther/dau1的平方跟
dau3=Math.floor(farther/dau1/dau2);//dau3年龄
if((dau1+dau2+dau3)==13&&(dau1*dau2*dau3==farther)){//在这里我没有加任何题目众没有跟得条件,如20岁之前结婚生子等等
tmp=new Array();
tmp[0]=farther;
tmp[1]=dau1;
tmp[2]=dau2;
tmp[3]=dau3;
results[results.length]=tmp;
}
}
}
}
disp(results);
//-->
</SCRIPT>
<BR><BR>
得到了下列答案组合,去掉组合重复的
得到
父亲 女儿1 女儿2 女儿3

60 2 5 6
63 3 3 7
72 3 4 6
75 3 5 5
80 4 4 5
<table width="250" border="1">
<tr><td>父亲</td><td>女儿1</td> <td>女儿1</td><td>女儿1</td></tr>
<tr><td>20</td><td>2</td><td>1</td><td>10</td></tr>
<tr><td>27</td><td>1</td><td>3</td><td>9</td></tr>
<tr><td>32</td><td>1</td><td>4</td><td>8</td></tr>
<tr><td>35</td><td>1</td><td>5</td><td>7</td></tr>
<tr><td><font color=red>36</font></td><td>1</td><td>6</td><td>6</td></tr>
<tr><td><font color=red>36</font></td><td>2</td><td>2</td><td>9</td></tr>
<tr><td>48</td><td>2</td><td>3</td><td>8</td></tr>
<tr><td>56</td><td>2</td><td>4</td><td>7</td></tr>
<tr><td>60</td><td>2</td><td>5</td><td>6</td></tr>
<tr><td>63</td><td>3</td><td>3</td><td>7</td></tr>
<tr><td>72</td><td>3</td><td>4</td><td>6</td></tr>
<tr><td>75</td><td>3</td><td>5</td><td>5</td></tr>
<tr><td>80</td><td>4</td><td>4</td><td>5</td></tr>
</table>
<BR>由于当父亲年龄确定的情况下,无法确定女儿年龄的情况只有当父亲36岁的时候无法直接得知女儿的年龄,所以只有可能166 和 229<BR>
于是需要最后一个条件:只有一个女儿头发黑色<BR>
于是判断只有229符合
逍遥小贼 2002-12-23
  • 打赏
  • 举报
回复
2,2,9
正确
DragonFly-9 2002-12-23
  • 打赏
  • 举报
回复
靠,我把那两个头发染红,另一个染黑不就得了
flyycyu 2002-12-23
  • 打赏
  • 举报
回复
up
zhanghk 2002-12-23
  • 打赏
  • 举报
回复
661的话就有两个黑头发了:)
Tan18 2002-12-23
  • 打赏
  • 举报
回复
661有何不可
harryyang 2002-12-23
  • 打赏
  • 举报
回复
嗨.看來我老了.!!!樓上的這麼多星星...我要等到那年阿
meizz 2002-12-23
  • 打赏
  • 举报
回复
我羡慕你的 120G 硬盘,1.5G 内存
我的只有 20G,256MB内存。
lnzyb 2002-12-23
  • 打赏
  • 举报
回复
厉害!厉害!
qiushuiwuhen 2002-12-23
  • 打赏
  • 举报
回复
可能的组合:
<script>
for(i=1;i<=4;i++)//13/3=4
for(j=i;j<=6;j++){//(13-1)/2=6
k=13-i-j;
s=i*j*k
if(k<j||s-k<20||s-k>40)continue;
document.write(i,",",j,",",k,"=",s,"<br>")
}
</script>

如果说三岁才长黑发的话(有点质疑)
<script>
for(i=1;i<=3;i++)
for(j=i;j<=3;j++){
k=13-i-j;
s=i*j*k
if(k<j||s-k<20||s-k>40)continue;
document.write(i,",",j,",",k,"=",s,"<br>")
}
</script>
ahui_net 2002-12-23
  • 打赏
  • 举报
回复
<HTML>
<HEAD>
<SCRIPT LANGUAGE="JScript">
function Clicks(){
Adds = "";
for(i=30;i<=100;i++){//假设父亲的年龄从30岁到100岁
Adds +="<br><br>"
var x1,x2,x3;
for(x1=1;x1<=13;x1++){//一女儿
for(x2=x1;x2<=13;x2++){//二女儿
for(x3=x2;x3<=13;x3++){//三女儿
if(x1+x2+x3 == 13 && x1*x2*x3==i && ((x1==x2 && x3>x1 )|| (x2==x3 && x1>x2)|| (x3==x1 && x2>x3))){
//一个女儿是黑的,另两个就都不是黑的,所以比黑的小。假如黑的为true,不是黑的为false,另两个都不是黑的,都为false,所以false==false
Adds += "x1="+x1+" x2="+x2+" x3="+x3+" father="+x1*x2*x3+"<br>";
}
}
}
}
}
spans.innerHTML = Adds;
}

</SCRIPT>
</HEAD>

<BODY>
<BUTTON onclick="Clicks()">Click</BUTTON>
<span id="spans"></span>
</BODY>
</HTML>
meizz 2002-12-23
  • 打赏
  • 举报
回复
按那种类推,应该只有(2、2、9)与(2、3、8)这两组答案比较符合。
而题中说只有一位黑头发,那另两个是双胞胎更为合理些。
llrock 2002-12-23
  • 打赏
  • 举报
回复
meizz(梅花雨) 厉害,这么快,我最天在灌水乐园看到了这道题,
http://expert.csdn.net/Expert/topic/1274/1274747.xml?temp=5.901736E-02
我的答案也是229,可是有人反对,大家说说思路,呵呵
llrock 2002-12-23
  • 打赏
  • 举报
回复
结贴时我贴出我的答案,明天晚上结贴,圣诞节快乐。朋友们别再为了哪个广告争了,开心点。
meizz 2002-12-23
  • 打赏
  • 举报
回复
2, 2, 9

坛子里已经有人问过了.

87,994

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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