| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1214 人关注过本帖
标题:平分水问题
取消只看楼主 加入收藏
if_exist
Rank: 2
等 级:论坛游民
帖 子:86
专家分:41
注 册:2009-4-20
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:3 
平分水问题
大家小时候是否做过这样一道题?
  有一个8升的瓶子装满水,还有一个5升的空瓶子和一个3升的空瓶子。要求将水分成两个4升


现在要用程序解这种题,算出结果示例如下(下面引自hat给出的一个代码的执行答案)(怕影响思路的先不要看)
假设是n升的水平分,最短的步骤是n-1次
Your containers: 8   5   3

Solution1 step0: 8-->0-->0
Solution1 step1: 3-->5-->0
Solution1 step2: 3-->2-->3
Solution1 step3: 6-->2-->0
Solution1 step4: 6-->0-->2
Solution1 step5: 1-->5-->2
Solution1 step6: 1-->4-->3
Solution1 step7: 4-->4-->0


其实这道题并不只有一种,还有 12 7 5  的杯子 平分为 6 6 0
16 9 7 的杯子,在第一个杯有16升的水,平分为8升。

整个题目一般类型是  2n n+1 n-1 的杯子 把存的2n的水,平分为 n n 0
但是,像 10 6 4 这样的,不可能平分为 5 5 0 。因为10 6 4 都是偶数,它们之间不可能
加减得出一个奇数5。
所以又有10 7 3的题型, 这类题有无数种,谁能给出一个通用的解法并做出解释。

(小弟在此先谢谢了,通用代码见过,但是没找到解释)



[ 本帖最后由 if_exist 于 2009-10-1 15:35 编辑 ]
搜索更多相关主题的帖子: 答案 
2009-10-01 15:27
if_exist
Rank: 2
等 级:论坛游民
帖 子:86
专家分:41
注 册:2009-4-20
收藏
得分:0 
谢谢楼上的各位,上面一楼由于我用的Tc所以就暂时没得看结果了。

我上次看到的那个批处理的代码很短,希望能够有人能告诉我这样操作的“原理”。

下面是我在中国dos联盟见到的批处理代码,没有标上原创,应该是按照出现过的算法做的吧,就是不知道操作根据。
(倒水题型可以从前面x y z处修改。)
程序代码:
@echo off 
setlocal EnableDelayedExpansion 
set x=10 
set y=7 
set z=3 
echo Your containers: %x%   %y%   %z% 
echo. 
set a=%x% 
set b=0 
set c=0 
set n=0 
:water1 
if %a% neq %b% ( 
  set /a n+=1 
  if %b% equ 0 ( 
    set /a a-=y 
    set /a b=y 
  ) else ( 
    if %c% equ %z% ( 
      set /a a+=z 
      set c=0 
    ) else ( 
      set /a t=z-c 
      if %b% gtr !t! ( 
        set /a b-=t 
        set /a c=z 
      ) else ( 
        set /a c+=b 
        set b=0 
      ) 
    ) 
  ) 
  echo Solution1 step%n%: %a%--^>%b%--^>%c% 
  goto :water1 
) 
echo Solution1 step%n%: %a%--^>%b%--^>%c% 
echo. 
pause


再次感谢各位热心的bccn会员。

[ 本帖最后由 if_exist 于 2009-10-3 09:56 编辑 ]

open-gl
2009-10-03 09:51
if_exist
Rank: 2
等 级:论坛游民
帖 子:86
专家分:41
注 册:2009-4-20
收藏
得分:0 
我找到简洁的描述了,现在剩下原理

倒水规则:
1、按A->B->C->A的顺序;
2、B倒空后才能从A中取;
3、C装满后才能向A中倒。

open-gl
2009-10-03 10:02
if_exist
Rank: 2
等 级:论坛游民
帖 子:86
专家分:41
注 册:2009-4-20
收藏
得分:0 
谢谢。
1,我先慢慢消化下先~   
2,寻找那个规律解法的原理……

open-gl
2009-10-03 10:29
快速回复:平分水问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017296 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved