本文主要是介绍逻辑思维训练-找出不一样的球,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
有9个球,其中有一个球的重量和其他不一样,用一个天秤称,求需要称多少次才能找到重量不一样的球。请列出步骤,写出程序代码。
1.可以将9个球,分成4(A),4(B),1(C)三组。
第一步,先比较A ,B,如果相等,直接,确定C组的那个不一样的球。否则第二步。
第二步,A和B不相等,随机将A或B在分为2(D),2(E)两组,称重: 不相等则,继续随机取一组分为1(F),1(G),继续比较,相等则取另一组比较,不相等则确定里面有个球是不一样的球,随机取一个(X)与其他的球比较,相等则确定X是不一样的那个球;
相等则需要将另外一组按同样的分为2(F),2(G)两组,按上面的步骤同理进行比较。
其实还有很多种分组方式,不一一举例了。
2.另外还可以通过类似冒泡排序的思想,来找出不一样的球。
一一比较,如,随机取2个球,比较:
如果重量相等,则知道这两个都不是要找的球,再取一个球替换之前的一个球称重,比较,不一样则里面有一个球是要找的球,相等则再接着取球比对。。。
如果重量不相等则里面有一个球是要找的球,再随机取一个球,和这两个球一 一比较,找出那个不一样的球。
public class TestLocal {public static void main(String[] args) {int[] vv=new int[]{6,6,6,8,6,6,6,6,6};for(int i=0;i<vv.length;i++){if(i<vv.length-1){if(vv[i]>vv[i+1]){int temp=vv[i];vv[i]=vv[i+1];vv[i+1]=temp;//类似冒泡,把轻的球放数组前面System.out.println("====第"+i+"次循环比对交换位置");}if(vv[i]==vv[i+1]){System.out.println("====第"+i+"次循环比对相等,位置不变");}}else{//最后一个比较if(vv[i-1]>vv[i]){int temp=vv[i-1];vv[i-1]=vv[i];vv[i]=temp;//类似冒泡,把轻的球放数组前面System.out.println("====第"+i+"次循环比对交换位置");}}}//质量不一样的球,是数组的最后一个System.out.print("===="+JSON.toJSONString(vv));}
}
输出如下:
====第0次循环比对相等,位置不变
====第1次循环比对相等,位置不变
====第3次循环比对交换位置
====第4次循环比对交换位置
====第5次循环比对交换位置
====第6次循环比对交换位置
====第7次循环比对交换位置
====[6,6,6,6,6,6,6,6,8]
3.还可以利用java的set集合,Set的排重功能。
这篇关于逻辑思维训练-找出不一样的球的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!