八个球有一个质量不同,用天平以最快的方法找到,怎么用c语言编
1.先一边放3个,如一样则是好球。
2.再称2个,如一样则剩下的一个是坏球。如不一样那轻的是坏球。
3.如1中(一边放3个的)有一边轻,那3个中有一个是坏球,那么如2中的方法再称就行了。
坏球偏轻的话,编程不会我知道怎么称出来,拿出两个称剩下六个,3个一边如果那边轻就调轻的那盘中间的两个,天平一边一个,如果一样重就是剩下的一个不合格,如果第一次3个一边的称出来两边一样重就称剩下两就知道哪个不合格
#include "stdio.h"int getFalseCoin(int ball[],int low,int high)
{
int i,sum1 = 0,sum2 = 0,sum3 = 0;
if(low+1==high)
{
if(ball[low]<ball[high]) return low+1;
else return high+1;
}
if((high-low+1)%2 == 0) /*n是偶数*/
{
for(i=low;i<=low+(high-low)/2;i++)
sum1= sum1 + ball[i]; /*前半段和*/
for(i=low+(high-low)/2+1;i<=high;i++)
sum2 = sum2 + ball[i]; /*后半段和*/
if(sum1 < sum2) return getFalseCoin(ball,low,low+(high-low)/2);
if(sum1 > sum2) return getFalseCoin(ball,low+(high-low)/2+1,high);
}
if((high-low+1)%2 !=0)
{
for(i=low;i<=low+(high-low)/2-1;i++)
sum1= sum1 + ball[i]; /*前半段和*/
for(i=low+(high-low)/2+1;i<=high;i++)
sum2 = sum2 + ball[i]; /*后半段和*/
sum3 = ball[low+(high-low)/2];
if(sum1< sum2)
return getFalseCoin(ball,low,low+(high-low)/2-1);
if(sum1 > sum2)
return getFalseCoin(ball,low+(high-low)/2+1,high);
if(sum1+sum3 == sum2+sum3) return low+(high-low)/2+1;
}
}
main()
{
int g,i,ball[9] = {0};
for(i=1;i<=8;i++)
ball[i]=2;
g=rand()%8;
ball[g]=1;
printf("The balls are ");
for(i=1;i<=8;i++)
printf("%d ",ball[i]);
printf("\nThe %dth ball is false.\n",getFalseCoin(ball,1,8));
getche();
}
#include<iostream>
using namespace std;
int main()
{
int a[8];
memset(a,0,sizeof(int)*8);
int position=rand()%8;
a[position]=1;//假设随机地产生一个位置,使其为1相当于那个质量不同的小球,以下求出那个小球的位置,即position
cout<<position<<endl;
int qua=-1,find=-1,se,sc;
for(int i=0;i<8/2;i++)
{
if(a[i]==a[8-i-1])//如果两个球的质量相等,则记录下这个质量
{
if(qua==-1)qua=i;
}
else//如果两个质量不等
{
se=i;sc=8-i-1;
}
}
find=(a[se]==a[sc]?(sc):se);//如果a[i]和a[qua]相等,则表示8-i为次品,否则i位置的为次品
cout<<find<<endl;
system("pause");
return 0;
}
这个是做了一个类比,你可以看看,坐个参考,大约这样就可以了
依次放入数组,如a[8]
用for循环两两相比,即a[0]与a[1]比,a[2]与a[3]比。。。。。
值不同的一组中,与其他组值不同的一个即所求
有16个球,其中有一个的重量和其他的不一样,怎么样用天平称3次找出那个...
假设16个球中有一个的重量比其他15个重。第一次:8个一组,选出重的一组。第二次:把8个球,3、3、2分成三组。称3、3两组,若平衡则重的小球在余下的两球中;若不平衡,选出重的一组。第三次:第二次称余下两球时,一称即可分出重的那个。第二次称余下三个小球时,称其中两个,若...
有十三个球 ,表面相同但有一个质量不同,请你用天平称三次挑出这个不同...
将球分城3堆。4,4,5 将两堆4个的分别放在天平两端 当天平平衡的时候:天平上八个球都为正常重量 所寻小球肯定在5个一堆里面 将五个球分两堆,2,3 将3个的那堆与正常球中取出的三个球分别放在天平两端 平衡:可得不正常球在剩下两个中,取其中一个正常与其比较重量,不等则为此球,相等...
有12个球,有一个质量不一样,请用天平称3次,把那个球称出来!
第一次称:天平左边放第一组,右边放第二组。A 第一种可能:平衡。则不同的在第三组。接下来可以在左边放第9、10、11号,右边放1、2、3号三个正常的。a.如果平衡,则12号是不同的;b.如果左重右轻,则不同的在9、10、11号中,而且比正常球重。再称一次:9放左边,10放右边,如果平衡,...
10个球中有一个质量与其它的不同,用天平称量最少要几次?
至少要称3次,才能找出这个不同的球。比原题目更难的是:12个球有一个质量与其它的不同,用天平称量3次找出来。下面介绍12球的称法:第一步:天平两边各4个球,外面也留4个球。这样有两种情况,天平平衡(简单情况)和天平不平衡(复杂情况)。先讨论简单情况。天平平衡,那么剩下四个球有一个坏...
有十二个球,其中一个重量不一样,分三次用天平称怎么样找出那个不一样...
把这12个球编号:1234 5678 ABCD 第一次,天平两边各放4个,比如是 1234 | 5678,有三种可能:1. 两端平衡。说明目标球是在 ABCD 之中;12345678 是正常的。第二次这样称: 123 | ABC。也有三种可能:(1) 两端平衡。说明目标是 D 。(2) 左重右轻。说明目标球在 ABC 之中,且比正常球轻...
有12个球,有其中一球重量不同,如何利用天平称3次机会称出哪个球是重量...
如果天秤平衡:便能知道1、2、3球中有我们等找的球,且第一次的结果可知所找的球是轻还是重.然后任取三个中的两个如果天秤平衡则另一个球便是要找的球.不平衡根据刚才对轻重的判断找出该球.(第三次称)---完成 如果天秤不平衡:(1) 与第一次称重时左右轻重不同(天平左右倾斜变化),要找的在...
若现有26个小球,中只有一个质量是不一样,给一台天秤,最多要称几次才能...
4次:第一:天平一边放13个,设一个质量为K,则每一边为13K,若一方不为此,进行第二次测量.第二:天平一边放6个,若平衡,则另外一个质量不一样,若一边不为6K,进行第三次测量.第三:天平一边放3个,若不平衡,选那一边测量,进行第四次测量.第四:天平一边放一个,若平衡,则为另一个;若不平衡,质量...
有12个小球,其中一个质量与其余小球质量不同,用天平只准称三次,怎样...
先将12个小球分成两份,一边6个,称出较重的一份(第一次),然后拿出两个小球,将剩下的4个小球分为二份称出较重的一份,如果二份相等则较重小球在拿出的两个小球中,(第二次),将较重的一份中两个小球称量,就能找出那个较重小球。
12个球,其中有一个球与其他球的质量不同,给你一架天平,如何称3次找 ...
1:拿出其中10个,5个一边的去称,若一样重则另外2个中有一个比其他的重,再称一次即可!2:若10个球的不平衡则拿出重的一边的5个其中的4个再2个一边去称,若一样重则另外的1个肯定比其他的球重!3:若4个球不平衡则拿出重的一边的2个再称!3次结束!
有十个一模一样的球,只是其中有一个质量不一样,给你一个天枰,要求只能...
1.分三组,3\/3\/4,其中两组三个的放在天平上。如果等重,说明质量不同的在另外四个上,此情况走2.1情况。如果不等重,说明剩下的四个球都是好的,坏球在天平上的六个球重。走2.2步骤。2.1,将四个球中的随便两个,如果等重,说明坏球在剩下的两个球里面。走3.1步骤。如果不等重,...