| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 887 人关注过本帖
标题:分水问题
只看楼主 加入收藏
nrxqq
Rank: 1
来 自:江苏淮安
等 级:新手上路
帖 子:7
专家分:0
注 册:2010-7-9
结帖率:50%
收藏
已结贴  问题点数:20 回复次数:9 
分水问题
1、编程解决如下数学问题:有12升水,怎样利用一个8升和一个5升的容器将水分为两个6升?要求以如下格式打印出分水步骤。(20分)

   a12 b8 c5

   12   0    0

   *    *    * ( “*”表示当前状态下每个容器的盛水量)

   ......

   6    6   0
这题有谁能告诉我思想,谢谢了
搜索更多相关主题的帖子: 分水 
2010-07-09 10:51
a151937404
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:46
专家分:117
注 册:2010-6-11
收藏
得分:2 
#include "stdio.h"
void main()  
{  
    printf(" 12,0,0\n");  
    printf("  4,8,0\n");
    printf("  4,3,5\n");
    printf("  9,3,0\n");
    printf("  9,0,3\n");
    printf("  1,8,3\n");
    printf("  1,6,5\n");
    printf("  6,6,0\n");
    system("pause");

}
2010-07-09 11:53
do8do8do8
Rank: 10Rank: 10Rank: 10
来 自:沙滩
等 级:贵宾
威 望:17
帖 子:366
专家分:1845
注 册:2010-7-2
收藏
得分:8 
关于分水的问题:
我的解题如下:包括乘水的容器,一共有3个容器,它们的分水是有规律的.
下面用A,B,C表示三容器
第一次分水,A->B.
第二次分水,B->C.
第三次分水,C->A.
第四次分水,B->C.
接着就是如此循环下去.又从第一次分水开始.直到判断跳出循环:
我的代码如下
#include<stdio.h>
#include<stdlib.h>
#define BDA 8
#define CDA 5
#define ADA 12
void main()
{
    int i=0;
    int a,b,c;
    int atmp,btmp,ctmp;
    int ac,bc,cc;
    int fa,fb,fc,ka,kb,kc;
    int mark=0;
    a=ADA;
    b=0;
    c=0;
    printf("a=%d b=%d c=%d\n",a,b,c);
    while(1){
        
        
   
        if(i==0){
            
            atmp=a;
            ac=BDA-b;/*需要放多少*/
            if(a>BDA){
            a=atmp-ac;
            b=b+ac;
            }
            else
            {a=0;
             b=atmp;
            }
            printf("A have %d, B have %d, C have %d\n",ADA,BDA,CDA);
            printf("%c->%c\n",'A','B');
        }
        if(i==1){
        
            btmp=b;
            bc=CDA-c;
            
            b=btmp-bc;
            c=c+bc;
            printf("A have %d, B have %d, C have %d\n",ADA,BDA,CDA);
            printf("%c->%c\n",'B','C');
            if(mark==0){
            fa=a;fb=b;fc=c;/*判断是否有解*/
             mark=1;
            }
            if(mark==1){
                ka=a;kb=b;kc=c;mark=0;
            }

        }
        if(i==2){
           ctmp=c;
           cc=ADA-a;
           a=a+ctmp;
           if(a>ADA)
           {a=ADA;c=ctmp-cc;
           }
           else
           c=0;
           printf("A have %d, B have %d, C have %d\n",ADA,BDA,CDA);
           printf("%c->%c\n",'C','A');
        }
        if(i==3)
        {
            btmp=b;
             if(b>CDA)
             {b=b-CDA;c=CDA;}
             else{
             b=0;
             c=btmp;}
             printf("A have %d, B have %d, C have %d\n",ADA,BDA,CDA);
             printf("%c->%c\n",'C','B');
        }
   
    if((a+b+c)==ADA)
        printf("a=%d b=%d c=%d\n",a,b,c);
    system("pause");
    ++i;
    if((a==ADA/2)&&(b==ADA/2)&&(c==0))
        break;
    if(fa==ka&&fb==kb&&fc==kc){
        printf("no answer\n");
        break;}
    if(i==4)
      i=0;
     
   
    }
}

[ 本帖最后由 do8do8do8 于 2010-7-9 15:02 编辑 ]

学C语言从底层开始,学编程从问题开始,一日学会C!!!
2010-07-09 13:58
do8do8do8
Rank: 10Rank: 10Rank: 10
来 自:沙滩
等 级:贵宾
威 望:17
帖 子:366
专家分:1845
注 册:2010-7-2
收藏
得分:1 
此算法 更正过了

[ 本帖最后由 do8do8do8 于 2010-7-9 14:59 编辑 ]

学C语言从底层开始,学编程从问题开始,一日学会C!!!
2010-07-09 14:06
nrxqq
Rank: 1
来 自:江苏淮安
等 级:新手上路
帖 子:7
专家分:0
注 册:2010-7-9
收藏
得分:0 
#include "stdio.h"
void main()  
{  
    printf(" 12,0,0\n");  
    printf("  4,8,0\n");
    printf("  4,3,5\n");
    printf("  9,3,0\n");
    printf("  9,0,3\n");
    printf("  1,8,3\n");
    printf("  1,6,5\n");
    printf("  6,6,0\n");
    system("pause");

}
那要是我把数值变一下不就完蛋啦
2010-07-09 15:57
nrxqq
Rank: 1
来 自:江苏淮安
等 级:新手上路
帖 子:7
专家分:0
注 册:2010-7-9
收藏
得分:0 
第一次分水,A->B.
第二次分水,B->C.
第三次分水,C->A.
第四次分水,B->C
位什么这样分水了,为什么不可以这样了B->A
2010-07-09 15:59
do8do8do8
Rank: 10Rank: 10Rank: 10
来 自:沙滩
等 级:贵宾
威 望:17
帖 子:366
专家分:1845
注 册:2010-7-2
收藏
得分:1 
分水的每一次操作得到的数据都不能相同
 原来由
12,0,0
4,8,0
4,3,5
9,3,0
如果进行B->A那么就会回到
12,0,0了

学C语言从底层开始,学编程从问题开始,一日学会C!!!
2010-07-09 16:09
nrxqq
Rank: 1
来 自:江苏淮安
等 级:新手上路
帖 子:7
专家分:0
注 册:2010-7-9
收藏
得分:0 
第一次分水,A->B.
第二次分水,B->C.
第三次分水,C->A.
第四次分水,B->C.
为什么要按这种规律来分了为什么B->C要分两次了
2010-07-09 16:19
do8do8do8
Rank: 10Rank: 10Rank: 10
来 自:沙滩
等 级:贵宾
威 望:17
帖 子:366
专家分:1845
注 册:2010-7-2
收藏
得分:8 
问的好
用归纳法 只有一个解 目的就是不能重复数据
不信 你试试
n=1 n=2........

学C语言从底层开始,学编程从问题开始,一日学会C!!!
2010-07-09 16:27
nrxqq
Rank: 1
来 自:江苏淮安
等 级:新手上路
帖 子:7
专家分:0
注 册:2010-7-9
收藏
得分:0 
还请大侠演示一下,我有点不太懂,谢谢
2010-07-09 16:44
快速回复:分水问题
数据加载中...
 
   



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

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