大家帮我一个忙,我在找游戏里的数学迷题

  • c
    crono
    想的头壳快要坏掉了
    大家再帮我想想
    rpg啊,avg啊这种迷题是不少的
    但是要一下子都找到就难找了
  • 鬼咒舞邑
    SH系列到处是~~
  • j
    john
    每次传说系列里都有的取石头游戏
  • t
    thelast
    鬼武者那个拼图游戏。。。。哎。。。。。。。。
  • D
    Demitri
    用一个3升和一个5升的桶,从一个大水缸里准确称量出4升水,最少要多少步?
  • c
    crono
    这个传说的取石头问题和tomb raider 的称水问题我都想到了
    还有什么?
    谢谢大家帮忙
  • c
    crono
    拼图游戏我很难想出他的数学渊源
  • 鬼咒舞邑
    装满5升~~倒入3升~~倒掉3升~~装入5升剩下2升~~装满5升~~倒入3升中一升即满~~
  • c
    crono
    ft
    成解题了
  • 灰色天使
    5升的桶装满倒入水缸 这样2次 水缸里就有10升水
    再用3升的桶从水缸里舀2次水出来 水缸里就只剩4升了~
  • c
    crono
    嗯,谢谢,第七位访客的迷题正在找
    据说四狂神传说数学迷题很多,但是偶没玩过
    现在玩时间也来不及
  • 鬼咒舞邑
    拜托是从一个大水缸里面舀水呀~~
  • D
    Demitri
    myth的迷题也强
  • c
    crono
    用到递归的迷题能大致说一下吗?
  • b
    bxyc
    神秘岛,神秘岛
  • j
    jjx01
    那个5升瓶和2升瓶取水的问题就属于递归的
    还有经典的拿盘子问题,一次只能拿一个盘子,大盘子不能放在小盘子下面的那个……
  • 堕落耶和华
    汉诺依塔倒是典型的递归问题...
    不过瓶子装水就不是递归了...你说递归的终止条件是什么?
  • f
    focus
    hanoi谜题:凯兰蒂亚2里面有
    瓶子灌水:Xeno里面有
  • 堕落耶和华
    XG里有瓶子装水问题?我怎么都没有印象...
  • j
    jjx01
    终止条件是某瓶子装了指定量的水
    要求递归一次能给该瓶装进1单位水
  • f
    focus
    是踩踏板放水,本质一样
  • f
    focus
    装水似乎也可以递归
  • j
    jjx01
    如果编装水程序的话肯定是要用递归的……
  • j
    jjx01
    四次吗……
  • j
    jjx01
    X表示反面,O表示正面

    XXXX
    XOOO 一次
    OXXO 二次
    XOXX 三次
    OOOO 四次

    推理过程:
    第一次肯定翻成三正一反,最后一次的前一次肯定是要求三反一正,而从三正一反翻成三反一正显然一次是完成不了的,中间要经过过渡,发现只要通过一次二正二反就能过渡过去,所以就是四次咯
    不严谨,将就一下好了

    想到了比较好的说明方法,题目改一下,5枚反面的,一次只能翻3枚,最少几次翻到全是正面
    (0)XXXXX
    (1)OOOXX
    (2A)OOXOO 或者 (2B)OXXOO 或者 (2c)XXXXX(=(0),不合)
    (3AA)XXOOO(=(2C),不合) 或者 (3AB)XXXXO(=(2A),不合) 或者 (3BA)XXXXX(=(0),不合) 或者(3BB)XOOOO(=(2A),不合) 或者XOXXO(3BC)
    4BCA OOOOO

    要求只能翻出与之前翻的情况不一样的情况,否则不合最少次数这个制约条件

    答案是4次
  • f
    focus
    灌水那个大致递归算法:(似乎有可能无解)
    public void fillQuest(Obj bottleA,Obj bottleB,int target)
    {
    if(bottleA.current.equals(target))
    {
    exit;
    }
    if(bottleB.current.equals(target))
    {
    exit;
    }
    if((bottleA.current-(bottleB.volume-bottleB.current)).equals(target))
    {
    bottleA.fill(bottleB);
    exit;
    }
    if((bottleB.current-(bottleA.volume-bottleA.current)).equals(target))
    {
    bottleB.fill(bottleA);
    exit;
    }
    if((bottleB.current+bottleA.current).equals(target))
    {
    if(bottleA.volume>bottleB.volume)
    {
    bottleB.fill(bottleA);
    exit;
    }
    else
    {
    bottleA.fill(bottleB);
    exit;
    }
    }

    for(;!bottleA.empty;bottleA.fill(bottleB))
    {
    bottleB.splash;
    this.fillQuest(bottleA,bottleB,target);
    }
    bottleA.reload;
    this.fillQuest(bottleA,bottleB,target);

    }
  • f
    focus
    随手写的,晚上编个试验下
  • j
    jjx01
    给两瓶偶数单位容量的水瓶让你倒出奇数容量的水就会无解
    同样的两瓶奇数单位的瓶子让倒出奇数单位(非两瓶原始容量的)的水也会无解
    如果给的一奇一偶,那么用辗转相除法取出单位容量……
  • 堕落耶和华
    没有这种说法吧
    装水问题通常都只有一个空容器用来交换
    所以想要靠分离出1单位的方法来凑容量的方法不可行的
    这类问题都是利用不同容器的容积差来拼凑答案的.
  • f
    focus
    前面说错了,想了一下,编程不能用递归,只能用回朔。因为无法使问题规模降阶,回朔比较简单。
  • 鬼咒舞邑
    瓶子灌水是寂静岭里面的~~
  • f
    focus
    没有多余的容器来装
  • D
    Demitri
    回朔编起来 我是完全不会
  • 堕落耶和华
    这和背包问题有些象
    路径搜索是正解之一

    回溯好像也不太对...仔细想想...
  • f
    focus
    回朔简单
    (1):假设当前状态为(A,m,B,n)--即A瓶有m,B瓶有n--记录下这个状态
    下一步一共只有这几种可能性
    A倒空
    B倒空
    A装满
    B装满
    A倒入B
    B倒入A
    依次探索上面几种动作,比如A倒空,状态变成(A,0,B,n)。然后察看这个状态有没有被记录过,如果状态没有被记录过,就记录下这个状态,然后回到(1),如果记录过,就回到(A,m,B,n),探索第二种动作……直到成功或者退回初始状态(A,0,B,0),后者代表无解。
  • 堕落耶和华
    女皇的路径判断条件有问题...
    这些描述中前4项是容器的状态,后2项是动作选择
    而这6项不是独立互斥的
    A倒入B可以和A倒空或者B装满同时存在,
    而且这6项也没有覆盖所有情况
    可以存在A空B也未满的...
  • f
    focus
    是你没看懂吧……6个都是原子动作,不能再分了,而且正好涵盖了所有情况
  • 堕落耶和华
    简单~女皇可以试试用你的(A,m,B,n)表示法来表示你说的5,6两个情况看...
  • f
    focus
    简单,设A的容量为M,B的容量为N (MN都是已知的)
    第5种情况:
    假若m>(N-n),结果是(A,m-(N-n),B,N)
    假若m<=(N-n),结果是(A,0,B,n+m)
  • D
    Demitri
    典型的最短路径回朔法?
  • f
    focus
    一次回朔得不到最短路径,只能得到一种解法而已
    最短路径和6种动作的排列顺序相关,要用其他算法
  • D
    Demitri
    应该和排列顺序无关吧 和动作的数量以及权值有关
  • f
    focus
    绝对是和排列顺序相关,你可以用简单的实例来验证
  • 永远的rookie
    A princess is as old as the prince will be when the princess is twice as old as the prince was when the princess\'s age was half the sum of their present age.

    >how old are they now?

    博得2里面的一个谜题。