Board logo

标题: [出题]一道逻辑题,请用批处理求解。 [打印本页]

作者: pusofalse     时间: 2008-7-24 02:42    标题: [出题]一道逻辑题,请用批处理求解。

一个中年妇女有三个女儿,三个女儿年龄相乘等于72,相加是她家的门牌号,大女儿的猫有一条腿是木头做的,用批处理求出三个女儿的年龄~

注意,门牌号我们不知道。

PS 知道思路的人请不要说出来,方便其他人独立思考。思考的快乐。。。

[ Last edited by pusofalse on 2008-7-24 at 09:34 AM ]
作者: lxmxn     时间: 2008-7-24 08:23
汗!
作者: pusofalse     时间: 2008-7-24 08:27
版主也来凑热闹呢。
花了一晚上时间,这题终于做出来了,纯P。
我还想发一道用批处理来判断谁是凶手的题呢。
作者: bat-zw     时间: 2008-7-24 08:28
先占个地吧,感觉大女儿的猫有一条腿是木头做的这个条件难以理解。
作者: moniuming     时间: 2008-7-24 09:11


  Quote:
Originally posted by bat-zw at 2008-7-24 08:28:
先占个地吧,感觉大女儿的猫有一条腿是木头做的这个条件难以理解。

是啊,我也不知道是怎么回事,乱来一个吧:
@echo off
Setlocal Enabledelayedexpansion
for /l %%a in (1 1 9) do (
   for /l %%b in (%%a 1 9) do (
      for /l %%c in (%%b 1 9) do (
         set /a "mo=%%a*%%b*%%c"
         if "!mo!"=="72" echo 三个女儿的年龄分别为: %%a %%b %%c
      )
   )
)
pause>nul

作者: pusofalse     时间: 2008-7-24 09:16
五种可能?。。。
当第一个女儿为1岁时,第二个为8岁?
当第一个女儿为2岁时,第二个或为4,或为6?第三个或为9,或为6?
。。。
作者: yishanju     时间: 2008-7-24 09:24
百度。。 http://zhidao.baidu.com/question/48303121.html
作者: 523066680     时间: 2008-7-24 09:27
5楼注意   (1,1,9) 范围还小了
说a*b*c=72 如果for的话 可能要(1,1,72) 运算量好大哦
作者: pusofalse     时间: 2008-7-24 09:27
- -||| 7楼的朋友,我敢打赌
对此题感兴趣的99%的人会打开你的链接,并会认真阅读一番。
因此便少了自己的思考。。。 完全是自己独立思考并解答出来的,那才值得高兴。
作者: slore     时间: 2008-7-24 09:28
。。。

貌似说过了……

你这个信息不太完整。。。。应该是个对话的。


有2个女孩年龄相同。还有一个比她们大……那么结果应该出来了。

1,1,72 (抛弃)---中年妇女

2,2,18

3,3,8
作者: pusofalse     时间: 2008-7-24 09:32
slore前辈。。。- -||||
我觉得每个人都应该独立思考啊。。。
2个女孩年龄相同,另一个比她们大。这个条件题目中并没有给出。
这样给出了等于直接把答案说出来了。。。。

是不是对话无所谓,我给出的这个题目中,条件已经很充分了。
作者: HAT     时间: 2008-7-24 09:36
能讲解一下为何排除6,6,2的组合吗?
作者: bat-zw     时间: 2008-7-24 09:38


  Quote:
Originally posted by HAT at 2008-7-24 09:36:
能讲解一下为何排除6,6,2的组合吗?

用大女儿排除的,我终于想明白了,但所有的条件并不能说明只有一种答案吧,像以下这些组合也可以吧:
1 6 12
2 2 18
2 3 12
2 4 9
1 4 18

[ Last edited by bat-zw on 2008-7-24 at 09:46 AM ]
作者: HAT     时间: 2008-7-24 09:53
双胞胎也有大女儿和二女儿的区分啊,为何排除6,6,2的组合呢?
作者: slore     时间: 2008-7-24 09:53
大女儿的猫有一条腿是木头做的


说明相同的是2个小女孩……


对话能说明有2个是相同年龄的。


第一见说:
三个女儿年龄相乘等于72,相加是她家的门牌号

A:不知道。。。

然后A出去看了下门牌号,还是不知道的

然后妇女说:
大女儿的猫有一条腿是木头做的

A:..

你给的没有对话的模式,那么就是只要满足最大的只有1个就行了。

这样其实降低了这逻辑题的精华部分,而且多了门牌号这种无用条件(对话模式,虽然还是没有给出门牌号是多少,但是有了很重要的信息)。
作者: HAT     时间: 2008-7-24 09:56
"大女儿的猫有一条腿是木头做的"是"相同的是2个小女孩"的充分?必要?充要条件?
作者: slore     时间: 2008-7-24 10:03
都不是……

只是说 最大的只有1个。
作者: 523066680     时间: 2008-7-24 10:04
郁闷  极度郁闷!!!等下我也发条概率题  论坛搞起数学热
作者: pusofalse     时间: 2008-7-24 10:08


  Quote:
大女儿的猫有一条腿是木头做的
说明相同的是2个小女孩……
对话能说明有2个是相同年龄的。
第一见说:
三个女儿年龄相乘等于72,相加是她家的门牌号
A:不知道。。。
然后A出去看了下门牌号,还是不知道的
然后妇女说:
大女儿的猫有一条腿是木头做的
A:..
你给的没有对话的模式,那么就是只要满足最大的只有1个就行了。
这样其实降低了这逻辑题的精华部分,而且多了门牌号这种无用条件(对话模式,虽然还是没有给出门牌号是多少,但是有了很重要的信息)。

是这样,原题中是说了A去看了门牌号之后仍不知道这样一个条件,这是原因,接着又给出了这个原因的结果,妇女说“大女儿的猫有一条腿是木头做的”
原题是相当于把原因和结果同时告诉了你,然后把这原因和结果同时作为条件继续推理。

我这道题,虽不是同时给出,但要的就是只给你结果,让你推理出原因。然后让你结合本就给你的结果和你自己推理出的原因继续推理。
“只要满足最大的只有1个就行了” 如果这样的话,这道题中“大女儿的猫有一条腿是木头做的这个结果和你推理出的原因”这两个条件不是显得多余了吗?

[ Last edited by pusofalse on 2008-7-24 at 10:12 AM ]
作者: 523066680     时间: 2008-7-24 10:11    标题: 我只写到一段 大家别见笑哈 等下改改

还是自己想  听你们说多了会睡不着的

@echo off
setlocal enabledelayedexpansion
for /l %%a in (1,1,72) do (
for /l %%b in (1,1,72) do (
set /a j=%%a*%%b
if not !j! gtr 72 (
  for /l %%c in (1,1,72) do (
  set /a j=%%b*%%c
  if not !j! gtr 72 (
  set /a j=%%a*%%c
  if not !j! gtr 72 (
    set /a m=%%a*%%b*%%c
    if !m!==72 echo %%a %%b %%c
))))))
pause

[ Last edited by 523066680 on 2008-7-24 at 10:18 AM ]
作者: bat-zw     时间: 2008-7-24 10:18
个人意见:
批处理属于技术性的东西,不宜从中掺杂其它罗辑推理因素,就拿本题来说吧,解题
的关键并不在于技术性的东西,而是从“大女儿的猫有一条腿是木头做的”中解读并
推理出关键的信息,假如从开始就给明其中两个女儿是双胞胎,还有一个女儿比她们
大,这道题不是很容易解吗?
作者: slore     时间: 2008-7-24 10:22


  Quote:
Originally posted by pusofalse at 2008-7-24 10:08:


是这样,原题中是说了A去看了门牌号之后仍不知道这样一个条件,这是原因,接着又给出了这个原因的结果,妇女说“大女儿的猫有一条腿是木头 ...

你混淆了我说的话……





A去看了门牌号之后仍不知道这样一个条件,这是原因 X
这个条件是告诉你有相同的年龄!


大女儿的猫有一条腿是木头
这个条件告诉你相同年龄的不是大女孩。(如果没有上面的情况,可以3个女孩年龄不一样……)



自己逻辑分析上有错误,错误的删减了条件。


当然你这样是个新的题目。。。只是……没有那个题的那种感觉了。
作者: 523066680     时间: 2008-7-24 10:25    标题: bat zw说的有道理!

我想看看自己知道这些条件了  能不能用批处理写出来
但还是碰丁了  不信各位试试
看看20楼的输出答案……不知道怎么把 相同的部分去掉

[ Last edited by 523066680 on 2008-7-24 at 10:26 AM ]
作者: slore     时间: 2008-7-24 10:30
循环的问题。

按他的题的意思,最大的是一个。输出的时候判断。。是不是比第1层的小,小才输出。
作者: slore     时间: 2008-7-24 10:31
而且用2重循环就可以。。。第3个数用72去得到,这样不用判断!m!==72
作者: moniuming     时间: 2008-7-24 10:32
我个人认为,哪怕是662的组合,也就是说大的是双胞胎,也会有大女儿啊,双胞胎也不可能会同时蹦出来吧.
作者: pusofalse     时间: 2008-7-24 10:34    标题: to 22

大女儿的猫有一条腿是木头
这个条件说明大女儿只有一个,没有并列最大,这个我同意。

再想下为何会有这个条件,当然就是与上面相反了,推理的结果有两组,组1中有两个并列最大,组2中有两个并列最小。 这个条件就是告诉我们要取组2这一组。

[ Last edited by pusofalse on 2008-7-24 at 10:35 AM ]
作者: HAT     时间: 2008-7-24 10:35


  Quote:
Originally posted by moniuming at 2008-7-24 10:32 AM:
我个人认为,哪怕是662的组合,也就是说大的是双胞胎,也会有大女儿啊,双胞胎也不可能会同时蹦出来吧.

昨天我在QQ群里面说过一模一样的话,哈哈。
作者: 523066680     时间: 2008-7-24 10:36
就是就是  这道题出的不严密!不过们还是要把它当成对的看……
作者: HAT     时间: 2008-7-24 10:37


  Quote:
大女儿的猫有一条腿是木头
这个条件说明大女儿只有一个,没有并列最大

这个说法太过牵强了,别说是双胞胎了,就是三胞胎也有哪个是大女儿的区分。
作者: 523066680     时间: 2008-7-24 10:39


  Quote:
Originally posted by slore at 2008-7-24 10:31 AM:
而且用2重循环就可以。。。第3个数用72去得到,这样不用判断!m!==72

我觉的有道理 于是就去试试了
但是……最后一个数 用除的哦  批处理的除是整除哦!!

slore也有今天 哦哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈
作者: slore     时间: 2008-7-24 10:39
当你有3个女孩,2个一样大的话。你不会叫 大女儿的。。。(放到实际中,你想象下。)
作者: slore     时间: 2008-7-24 10:42
批处理的除是整除

思维不要局限了哦~
这个是可以突破……比如简单给他扩大10倍。。看个位是不是0……

(纯粹为自己开脱=。=55~还是VBS好呀!)
作者: 523066680     时间: 2008-7-24 10:46
所以等下看谁用做这道题 ,把数组一段段过滤
成功者  我们给予强烈的加分鼓励!
排除---相同的组 寻找“求和”相同的组…………紧张进行中!
作者: slore     时间: 2008-7-24 10:47


  Quote:
Originally posted by pusofalse at 2008-7-24 10:34:
大女儿的猫有一条腿是木头
这个条件说明大女儿只有一个,没有并列最大,这个我同意。

再想下为何会有这个条件,当然就是与上面相反了,推理 ...

如果没有这个条件:

4种情况……

3个不一样大,3个一样大(72否定掉了)。

2个一样大---1>.  1大2小,2大1小。


这个条件是用来排除2大1小。
那么还有  3个不一样大,和1大2小。

我已经说了,你的题设只要 最大是1个就满足。


你的题设,不能得到有2个年龄相同……(说了,你把对话精简这个题少了色彩了。)
作者: bat-zw     时间: 2008-7-24 10:50
我晕,害我白打了一大通字,全没了,又得重打,算了,直接给代码,不说明了:
@echo off&setlocal enabledelayedexpansion
for /l %%a in (2,1,24) do (
    for /l %%i in (2,1,24) do (
         set /a num=%%a*%%a*%%i
         if !num! equ 72 if %%i gtr %%a echo 两个小女儿%%a岁,大女儿%%i岁
))
pause>nul

作者: moniuming     时间: 2008-7-24 10:54

@echo off
Setlocal Enabledelayedexpansion
for /l %%a in (1 1 30) do (
   for /l %%b in (%%a 1 30) do (
      for /l %%c in (%%b 1 30) do (
         set /a "mo=%%a*%%b*%%c"
         if "!mo!"=="72" (
            if not "%%c"=="%%b" echo 三个女儿的年龄分别为: %%c %%b %%a
         )
      )
   )
)
pause>nul

作者: 523066680     时间: 2008-7-24 10:54
无语!!!
作者: slore     时间: 2008-7-24 10:54
你这个是承认了原题的……

你做下LZ的看看。。。

3个中最大只有1个。其他的可以不同。。。


起码你的24要给人说明下。。。
作者: pusofalse     时间: 2008-7-24 10:54
*******************************

[ Last edited by pusofalse on 2008-7-24 at 11:45 AM ]
作者: HAT     时间: 2008-7-24 11:02


  Quote:
Originally posted by slore at 2008-7-24 10:39 AM:
当你有3个女孩,2个一样大的话。你不会叫 大女儿的。。。(放到实际中,你想象下。)

我的小学同学(她们小学毕业以后就辍学了),他们家就是三个,双胞胎的姐姐,但人家确实分开叫大女儿、二女儿的。
我妹妹的小学至中学同学,他们家就是三个,双胞胎的妹妹,但人家也是分开叫大女儿、二女儿的。
如果我将来有幸得到双胞胎的话,我相信我会分开叫大女儿、二女儿的。
作者: bat-zw     时间: 2008-7-24 11:06
还是要写说明:
一个中年妇女母亲, 而其三个女儿年龄的积是72,而其中两个小女儿是双胞胎,还
有一个大女儿,这是我们通过初步推理得来的条件;
那么分析一下大女儿最大能有多大,能被72整除的整数从大到小依次为72、36、
24、18。。。,明显可以排除72和36(中年妇女),所以大女儿最大的理论年龄是24
岁,从而得出两个小女儿的最小年龄积是3,但3是可以排除的(两女儿年龄一样大),
因此这个最小积应为4,也就是两小女儿最小年龄是2,于是女儿们的年龄段是在
2~24间,所以for /l %%i in (2,1,24)。
不知道我解题的思路是不是对的,呵呵。
作者: 523066680     时间: 2008-7-24 11:11
据说有可能是8个月大%……



[ Last edited by 523066680 on 2008-7-24 at 11:13 AM ]
作者: slore     时间: 2008-7-24 11:17
你说的情况,其实那个已经算做名字了……

是自己约定了对应的。

题的本意是这样……


其实1月生了个,休息2个月如果又……12月还生一个……

这个早想好了~~但是和自己说的矛盾就没有提出来=。=

年龄相同不代表是双胞胎(本来就你们不要思维定势的)。。。当然这个就可以很明确的叫声大女儿……

所以我们发现了题目的BUG……这个题出的不是很严密 :)


纠正下自己的错误:
其实原题是先知道72还有和和门牌号相同,但是进来的时候没有看。
自己列出了所有的组合和之和。后来看了门牌号还是不知道,说明
这些组合有和相同的。(而不是我说的有2个年龄一样的,不好意思这里误导大家拉下※题接触早了,忘了。)

不知道是不是偶然。和相等正好是2个都相同数得组合。也许得用某些著名得数学定理去证明了。
作者: slore     时间: 2008-7-24 11:21


  Quote:
Originally posted by bat-zw at 2008-7-24 11:06:
还是要写说明:
一个中年妇女母亲, 而其三个女儿年龄的积是72,而其中两个小女儿是双胞胎,还
有一个大女儿,这是我们通过初步推理得来的条件 ...

貌似查了下联合国得划分,45—59岁为中年……

23生第一个不过分吧?但是剩下的就=。=



PS:你的那个代码的话,即使改成72还是那2个结果。
作者: 523066680     时间: 2008-7-24 11:24
灌一下水不介意吧?
你说的太Good了!


作者: bat-zw     时间: 2008-7-24 11:30
所以我继续坚持我在21楼的意见,并不再在此贴发表讨论了。
作者: 523066680     时间: 2008-7-24 11:32
我不知道发什么神经 突然想到一个问题  
批处理能不能做扫雷游戏?或者是用批处理解扫雷游戏?
(如果脑子受伤不要找我……我是无辜的 无意想到的)
作者: 523066680     时间: 2008-7-24 19:58
我给你们一个完整的说法,batzw我要你看
先放出原题:
三个女儿的年龄
一位人口普查员来到某户人家家里,迎接他的是一位中年妇女,她生了三个女儿。当普查员询问这三个女孩的年龄时,这位妇女有意卖一个关子,说:“如果你将她们各自的年龄相乘,得数会是72;但如果将她们的年龄相加,那又碰巧是我家的门牌号码了。你可以自己去看看。”
人口普查员说:“可是要推算出她们年龄,这些信息可还不够啊。”
这位妇女又说:“那好吧,我的大女儿有一只猫,其中一只脚是木头做的。”
人口普查员笑道:“哈!现在我知道她们的年龄了。”


第一步  我不考虑最大女儿的年龄,求出出三个72以内的数 相乘=72的组数
           这里就不发出来了
第二步  我用for 得到的组存在重复,过滤一下现在符合红色文字说法的数组有:
                 1,1,72
                 1,2,36
                 1,3,24
                 1,4,18
                 1,6,12
                 1,8,9
                 2,3,12
                 2,4,9
                 2,6,6
                 3,3,8
                 3,4,6
第三步  看看文中绿色的部分 我们不知道门牌号,设他为n,按题目的说法
           普查员是心中存在两个或两个以上的答案,所以觉得条件不够。
          这样 ,就说明 有两组或两组以上的数组 都符合组内数相加=n
          其中n是同一个数---门牌号
                  用批处理计算得到以下数据:
                 "1+1+72=74"
                 "1+2+36=39"
                 "1+3+24=28"
                 "1+4+18=23"
                 "1+6+12=19"
                 "1+8+9=18"
                 "2+3+12=17"
                 "2+4+9=15"
                 "2+6+6=14"
                 "3+3+8=14"
                 "3+4+6=13"
              我们看到了什么?"3+3+8=14"    "2+6+6=14"
              只有这两组数 组内数相加=相同的一个数  从上式子得出。
              这个数就是门牌号n=14 就是这两组数让普查员困扰
第4步   这个时候才用到大女儿  选3,3,8


----------------------------------------------------------------------------------
另外说明 :我们就是因为提前看了答案 才会搞的那么晕

看看答案怎么说的?
答案:人口普查员应该知道门牌号,但不知道年龄,因此门牌号是14。他需要更多的信息以决定到底是应该采用6、6、2 的组合还是8、3、3的组合。当听见这位妇女说“大女儿”时,他就知道应该是8、3、3了。

连答案都在糊弄人 ,门牌号是14让大家迷糊了,事实解题的过程中,我们不需要
求出门牌号 ,只需知道:普查员根据 年龄积=72 年龄的和=n
得到了一些答案。寻找积为72,和又相同的数,
就会知道是那些数组让普查员困扰了。
然后根据那最后的大女儿这个说法……

[ Last edited by 523066680 on 2010-7-22 at 19:07 ]
作者: 523066680     时间: 2008-7-25 08:35
很希望有人加分,可帖子沉了……
   我想否认bat-zw对于此题用批处理解不适合的说法   
   我认为用49楼的方案,用批处理是可以实现理解式的解题的。

    好以下的问题。全部交给批处理,与此题无关我无心争论。
1.求出72以内的  三个数相乘=72 的数组
2.如果得到的数组存在重复,排除其他想同的数组。
3.分别给组内的数求和,把和相同的数组提取,并显示该“和”为多少。
4.……这一步可能……

从第二步开始就很难了  (再次说,以上批处理想法与该题无关。我无心争论)

[ Last edited by 523066680 on 2008-7-25 at 08:43 AM ]
作者: moniuming     时间: 2008-7-25 09:07    标题: 根据49楼的分析


@echo off
Setlocal Enabledelayedexpansion
for /l %%a in (1 1 30) do (
   for /l %%b in (%%a 1 30) do (
      for /l %%c in (%%b 1 30) do (
         set /a "mo=%%a*%%b*%%c"
         if "!mo!"=="72" (
            set /a "niu=%%a+%%b+%%c"
            if defined !niu! (
               if not "%%c"=="%%b" echo 三个女儿的年龄分别为: %%c %%b %%a
            ) else (set !niu!=ming)
         )
      )
   )
)
pause>nul

作者: 523066680     时间: 2008-7-25 09:24
问号   你们是怎么一次性加8分的?
我发现楼上的解答有问题!算了……帖子沉了

[ Last edited by 523066680 on 2008-7-29 at 06:08 PM ]
作者: slore     时间: 2008-7-25 11:17
等级……

中级用户

金牌会员