助民劳动和c语言程序

故乡的云

<p class="ql-block">故乡的云</p><p class="ql-block">上世纪70年代,我在部队当兵的时候,参加一次助民劳动,就是帮助驻地附近的生产队往地里送肥。北方农村的猪圈,猪们大小便到坑里,人们要不断挖土运到猪圈,把土填到坑里,这叫“垫圈”,到坑差不多填满时,这就要下到坑里,用铁锹把这些稀泥状的土挖出来,堆积在旁边,这叫“起圈”,春耕时,用小车或大车把这些泥土运到地里,撒播出去。我们那天的助民劳动就是干这个活路。</p><p class="ql-block">劳动中短暂休息时,熊指导员给大家出了个智力题:12个乒乓球,只知道其中有一个是不合格的(“问题球”),它的重量与合格的不同,怎样用天平,只秤三次,把这个不合格的球找出来。注意,只知道问题球的重量与合格球不同,但不知是重是轻。用天平,只要两边放的球变化,就算秤了一次。指导员声称,这是某数学家到中国来招研究生时出的题。</p><p class="ql-block">大家边劳动边思考,圆满完成了劳动任务,有几个战友,把这问题也解决了图片图片图片图片图片。我把解题的过程记录下来了,一直保留着,后来也拿出来看看。</p><p class="ql-block">再后来,再后来,感觉记录飞罗嗦的,自己有时都看不懂了,于是把它改写成计算机C程序,可以运行。</p><p class="ql-block">#include</p><p class="ql-block">main()</p><p class="ql-block">{</p><p class="ql-block">int a1,a2,a3,a4,b1,b2,b3,b4,c1,c2,c3,c4;</p><p class="ql-block">//用a1,a2....c4 来表示12个小球</p><p class="ql-block">//输入时,可以用1表示重,0表示轻</p><p class="ql-block">scanf("a1=%d\n",&a1);</p><p class="ql-block">scanf("a2=%d\n",&a2);</p><p class="ql-block">scanf("a3=%d\n",&a3);</p><p class="ql-block">scanf("a4=%d\n",&a4);</p><p class="ql-block">scanf("b1=%d\n",&b1);</p><p class="ql-block">scanf("b2=%d\n",&b2);</p><p class="ql-block">scanf("b3=%d\n",&b3);</p><p class="ql-block">scanf("b4=%d\n",&b4);</p><p class="ql-block">scanf("c1=%d\n",&c1);</p><p class="ql-block">scanf("c2=%d\n",&c2);</p><p class="ql-block">scanf("c3=%d\n",&c3);</p><p class="ql-block">scanf("c4=%d\n",&c4);</p><p class="ql-block">//1.第一次秤,平衡</p><p class="ql-block">if(a1+a2+a3+a4==b1+b2+b3+b4) </p><p class="ql-block"> {</p><p class="ql-block"> printf("天平上的a1,a2,a3,a4,b1,b2,b3,b4没问题\n");</p><p class="ql-block"> Printf("问题球在天平下的c1,c2,c3,c4中\n");</p><p class="ql-block"> if(a1+a2==c1+c2) //第二次秤,平衡</p><p class="ql-block"> {</p><p class="ql-block"> printf("问题球在c3,c4中\");</p><p class="ql-block"> if(a1==c3) //第三次秤</p><p class="ql-block"> printf("c4是问题球\n");</p><p class="ql-block"> else </p><p class="ql-block"> printf("c3是问题球\n"); </p><p class="ql-block"> }</p><p class="ql-block"> else //第二次秤,没平衡</p><p class="ql-block"> { </p><p class="ql-block"> printf("问题球在c1,c2中\");</p><p class="ql-block"> if(a1==c1) //第三次秤</p><p class="ql-block"> printf("c2是问题球\n");</p><p class="ql-block"> else </p><p class="ql-block"> printf("c1是问题球\n"); </p><p class="ql-block"> }</p><p class="ql-block"> }</p><p class="ql-block">//2.第一次秤,不平衡,"左倾"</p><p class="ql-block">if(a1+a2+a3+a4&gt;b1+b2+b3+b4) </p><p class="ql-block"> { </p><p class="ql-block"> printf("天平下面的c1,c2,c3,c4没有问题\n");</p><p class="ql-block"> printf("下面,对天平上下的球进行易位,这是关键的步骤");</p><p class="ql-block"> </p><p class="ql-block"> if(a1+c1+c2+c3==a2+a3+a4+b1) //2-1.易位后第二次秤,平衡</p><p class="ql-block"> {</p><p class="ql-block"> printf("易位后平衡,说明问题球离开了天平\n");</p><p class="ql-block"> printf("问题球在b2,b3,b4中,其它球都没有问题\n");</p><p class="ql-block"> printf("由左倾变为平衡,说明b2,b3,b4中的问题球是轻的\n"); </p><p class="ql-block"> if(b2==b3) //第三次秤</p><p class="ql-block"> printf("b4是问题球\n");</p><p class="ql-block"> else</p><p class="ql-block"> if(b2&gt;b3)</p><p class="ql-block"> printf("b3是问题球\n"); </p><p class="ql-block"> else</p><p class="ql-block"> print("b2是问题球\n"); </p><p class="ql-block"> }</p><p class="ql-block"> </p><p class="ql-block"> if(a1+c1+c2+c3&gt;a2+a3+a4+b1) //2-2.易位后第二次秤没有平衡, 仍"左倾"</p><p class="ql-block"> {</p><p class="ql-block"> printf("易位后左倾的态势没变化,说明易位未触及问题球,它还在天平上原来位置\n");</p><p class="ql-block"> printf("问题球就在没易位的a1,b1中,虽然不知道轻重\n");</p><p class="ql-block"> if(a1==c1) //第三次秤,用嫌疑球与好球对比</p><p class="ql-block"> printf("b1是问题球\n");</p><p class="ql-block"> else</p><p class="ql-block"> printf("a1是问题球\n");</p><p class="ql-block"> } </p><p class="ql-block"> </p><p class="ql-block"> </p><p class="ql-block"> if(a1+c1+c2+c3&gt;a2+a3+a4+b1) //2-3.易位后第二次秤没有平衡, 但改为"右倾"(\)</p><p class="ql-block"> {</p><p class="ql-block"> printf("易位后左倾的态势变为右倾,说明问题球在天平上发生位置转移\n");</p><p class="ql-block"> printf("由左倾变为右倾,说明问题球是重的,由左边易位到右边了\n"); </p><p class="ql-block"> printf("就在a2,a3,a4中\n");</p><p class="ql-block"> if(a2==a3) //第三次秤</p><p class="ql-block"> printf("a4是问题球\n");</p><p class="ql-block"> else</p><p class="ql-block"> if(a2&gt;a3)</p><p class="ql-block"> printf("a2就是问题球\n");</p><p class="ql-block"> else</p><p class="ql-block"> printf("a3就是问题球\n");</p><p class="ql-block"> } </p><p class="ql-block"> }</p><p class="ql-block">//3.第一次秤,不平衡,"右倾"</p><p class="ql-block">if(a1+a2+a3+a4</p><p class="ql-block"> { </p><p class="ql-block"> printf("天平下面的c1,c2,c3,c4没有问题\n");</p><p class="ql-block"> printf("下面,对天平上下的球进行易位,这是关键的步骤\n");</p><p class="ql-block"> </p><p class="ql-block"> if(a1+c1+c2+c3==a2+a3+a4+b1) //3-1.易位后第二次秤,平衡</p><p class="ql-block"> {</p><p class="ql-block"> printf("易位后平衡,说明问题球离开了天平\n");</p><p class="ql-block"> printf("问题球在b2,b3,b4中,其它都没有问题\n");</p><p class="ql-block"> printf("由右倾变为平衡,说明b2,b3,b4中的问题球是重的\n"); </p><p class="ql-block"> if(b2==b3) //第三次秤</p><p class="ql-block"> printf("b4是问题球\n");</p><p class="ql-block"> else</p><p class="ql-block"> if(b2&gt;b3)</p><p class="ql-block"> printf("b2是问题球\n");</p><p class="ql-block"> else</p><p class="ql-block"> printf("b3是问题球\n"); </p><p class="ql-block"> }</p><p class="ql-block"> </p><p class="ql-block"> if(a1+c1+c2+c3</p><p class="ql-block"> {</p><p class="ql-block"> printf("易位后右倾的态势没变化,说明易位未触及问题球,它还在天平上原来位置\n");</p><p class="ql-block"> printf("问题球就在没易位的a1,b1中,虽然不知道轻重\n");</p><p class="ql-block"> if(a1==c1) //第三次秤,用嫌疑球与好球对比</p><p class="ql-block"> printf("b1是问题球\n");</p><p class="ql-block"> else</p><p class="ql-block"> printf("a1是问题球\n");</p><p class="ql-block"> } </p><p class="ql-block"> </p><p class="ql-block"> </p><p class="ql-block"> if(a1+c1+c2+c3&gt;a2+a3+a4+b1) //3-3.易位后第二次秤不平衡, 但改为"左倾"</p><p class="ql-block"> {</p><p class="ql-block"> printf("易位后右倾的态势变为左倾,说明问题球在天平上发生位置转移\n");</p><p class="ql-block"> printf("由右倾变为左倾,说明问题球是轻的,由左边易位到右边了\n"); </p><p class="ql-block"> printf("就在a2,a3,a4中\n");</p><p class="ql-block"> </p><p class="ql-block"> if(a2==a3) //第三次秤,用嫌疑球与好球对比</p><p class="ql-block"> printf("a4是问题球\n");</p><p class="ql-block"> else</p><p class="ql-block"> if(a2&gt;a3)</p><p class="ql-block"> printf("a3是问题球\n");</p><p class="ql-block"> else</p><p class="ql-block"> printf("a2是问题球\n");</p><p class="ql-block"> } </p><p class="ql-block"> }</p><p class="ql-block">} </p><p class="ql-block">注1:算法并非最优,相当啰嗦,我后来见过帅哥们写的很简练的程序。</p><p class="ql-block">我仅仅是为了记录当年的思路,也便于理解和阅读,不敢和帅哥些比。</p><p class="ql-block">注2 :我现在都看不咋懂了。</p>