已解决图片问题-益智题:一个5斤的桶和一个7斤的桶,怎么得到6斤的水?

分水分油问题详细解析
分水分油问题:一个5斤的桶和一个7斤的桶,怎么得到6斤的水?
朋友用手机给我出了这道题:
分析原理: 现在有5斤和7斤,要得到6斤,就先得到1斤,要得到1斤,那么就是要得到5-1=4斤(因为5+1=6和7-1=6是要求的,而7+1=8不可能),而得到4斤,就必须先得到7-4=3斤(因为5-4=1,死循环),要得到三斤,就必须得到5-3=2斤(因为7-2=5也死循环),至于2斤,不就是7-5斤了吗?呵呵。
再反过来看,先得到个2斤,将2斤放入5斤的桶中,再将7斤的灌满,倒入5斤中,最后7斤中只有4斤了,将4斤的倒入5斤中,再将7斤灌满,将5斤倒满,最后7斤桶中不就只有6斤了吗?呵呵,这才是真正的答案。那我考你一下,就这个条件怎么得到8斤的水呢?那么怎么得到3斤呢?
其实还可以简化:first :就是将大桶中的水倒入小桶中,清空小桶,多出来的水再倒入小桶中,清空小桶,然后将大桶加满,go to first .如此循环。这样看可以得到多种水。一开始大桶剩余是0斤。那么第一次是7-(5-0)=2斤,第二次是7-(5-2)=4斤,第三次是7-(5-4)=6斤,第四次是7-(5-6)=8斤(其实是大桶剩一斤)所以7-(5-6)=任秋 说(16:54): =1的,第五次,是7-(5-1)=3斤,第六次得到的7-(5-3)=5斤。于是循环了。
于是我发短信感谢我的朋友:
呵呵,谢谢你,我以前就是这类问题没有解决,今天灵感一来就搞懂了。
所以可以看得到的水的斤的种数为1,2,3,4,5,6,7,8,9,10,11,12,13,14.当然这里8斤以上的是有争议的。这里就不再讨论了。
那么我可不可以用程序来表示呢?试下吧。
Int a=5 b=7 c=0;
几次分别得到的斤数是2,4,6,1,3,5,7
如果我要得到2斤,c=b-(a-0)  调用函数:说出步骤。
            // 4 斤,c=b-(a-c)
            // 6 斤,c=b-(a-4)
            //1斤 C=b-(6-a)
            //10斤 C=b-(a-8)
   简单C++函数实现:
int a=5,b=7,c=0;
for(int i=1;i<b+1;i++)
{
  c=b-(a-c);
  if(c&lt;=b)
printf("%d \n",c);
  else{                      //如果c>b 原理与上一样,只是重新循环了。
    c=c-b;
        printf("%d \n",c);
  }
}
运行结果:
wps_clip_image1
那么怎么将得到的步骤显示出来呢?
       我用了一个函数:step(int c,int i){ } 其中传递的参数分别为c的值,和i的值。
void get(int b,int c,int i)
{  int c1=c;
int i1=i;
char str[]="清空A桶,加满B桶,用B桶中的水将A桶倒满,",str1[]="得到  斤的水,",str3[]="将B桶中剩的水倒入A桶,\n";
printf(str);
for(int j=1;j&lt;i1;j++)
{
printf(str3);
    printf(str);
}
printf("B桶中剩 %d 斤\n",c1);
}程序运行结果:
wps_clip_image2
这其中有个循环输出:类似 a  ,aba,  ababa,  abababa  .......
       于是我采取先输出a  再输出ba 并且ba循环。呵,这种算法感觉不怎么好,但没有更好的办法,希望拿出来大家指点。
当然程序要讲究通用性,不能就是用来算这一个题目啦,而是要将此类型题全部解决。
所以请大家再看到主函数中的a ,b 我都是用的变量表示,而没有用5,7表示的原因就在这里。
如果让我们输入a,b 的值,不就解决了这个问题吗?是的。
    printf("请输入小桶的容量:");
scanf("%d",&a);
printf("请输入大桶的容量:");
        scanf("%d",&b);
运行结果:
wps_clip_image3
输入7,10 得到的结果是:
wps_clip_image4
之后我又发现了一个有趣的现象:
wps_clip_image5
wps_clip_image6
wps_clip_image7
wps_clip_image8
wps_clip_image9
wps_clip_image10
wps_clip_image11
。。。。。
两个偶数的桶始终只能得到偶数斤的水。
wps_clip_image12
wps_clip_image13
wps_clip_image14
wps_clip_image15
wps_clip_image16
wps_clip_image17
。。。。。。
奇数与奇数可以得到1-b 的所有的自然数。
wps_clip_image18
。。。。。。。
难道奇数与偶数可以得到1-B的所有的自然数吗?但出现了反例:
wps_clip_image19
wps_clip_image20
如果奇数A是偶数B的质因子,那么就不能得到所有的自然数了。只能得到A的倍数到B。
到目前为止还有个问题没有解决,那就是重复出现的问题:
现在我用了数组,能不能用清除数组中相同的数的方法解决呢?
我不想用太复杂的数组置换,希望将来有灵感时再做!
 
 
 

你可能感兴趣的:(职场,休闲,个人体会)