黑马程序员技术交流社区
标题:
一道微软面试题的Java解法,这是一般人做的?···
[打印本页]
作者:
张雷
时间:
2011-10-7 16:59
标题:
一道微软面试题的Java解法,这是一般人做的?···
问题:你有4瓶药。每粒药丸的重量是固定的,不过其中有一瓶药受到了污染,药丸的重量发生了变化,每个药丸增加了一点重量。你怎样一下子测出哪瓶药是遭到污染的呢?
Java代码:
package cn.nx.majinze;
public class GetMedicine
{
public static void main(String[] args)
{
int[] T={12,17,12,12};
getTrue(T);
}
public static void getTrue(int[] T)
{
int flag=0;
for(int i=0;i<T.length;i++)
{
if(flag==0)
{
for(int j=0;j<T.length;j++)
{
if(flag==0)
{
for(int k=0;k<T.length;k++)
{
if(flag==0)
{
if(i!=j&&j!=k&&i!=k)
{
if(T[i]==T[j]&&T[j]==T[k])
{
System.out.println("合格的产品已经找到: "+i+j+k);
flag=1;
break;
}
else
{
System.out.println("算法仍在继续....");
}
}
}
else
{
break;
}
}
}
else
{
break;
}
}
}
else
{
break;
}
}
}
}
作者:
成杰
时间:
2011-10-7 18:58
这。。。
作者:
林国锋
时间:
2011-10-7 19:13
LZ的代码会不会太难看了点...看得头晕{:soso_e134:}
作者:
林国锋
时间:
2011-10-7 19:20
package cn.nx.majinze;
public class GetMedicine {
public static void main(String[] args) {
int[] T = {12, 17, 12, 12};
getTrue(T);
}
public static void getTrue(int[] T) {
int flag = 0;
for(int i = 0; i < T.length; i++) {
if(flag == 0) {
for(int j = 0; j < T.length; j++) {
if(flag == 0) {
for(int k = 0; k < T.length; k++) {
if(flag == 0) {
if(i != j && j != k && i != k) {
if(T[i] == T[j] && T[j] == T[k]) {
System.out.println("合格的产品已经找到: " + i + j + k);
flag = 1;
break;
} else {
System.out.println("算法仍在继续....");
}
}
} else {
break;
}
}
} else {
break;
}
}
} else {
break;
}
}
}
}
复制代码
帮lz优化了一下代码的格式
作者:
王家俊
时间:
2011-10-7 22:21
因为4瓶药在开始时每粒要的重量是一样的,但后来有一瓶受污染,每粒药重量增加了一点,所以说明完好的那3瓶的哈希值和equals比较的值是相同的,但污染的那瓶虽然哈希值和其他3瓶相同但equals比较的值却不一样,这样就可以HashSet把他们都存入,谁在最后一个位置谁就是受污染的(HashMap存储是按照值的大小从小到大存储的。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2