黑马程序员技术交流社区

标题: 一道微软面试题的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
  1. package cn.nx.majinze;
  2. public class GetMedicine {
  3.     public static void main(String[] args) {
  4.         int[] T = {12, 17, 12, 12};
  5.         getTrue(T);
  6.     }
  7.     public static void getTrue(int[] T) {
  8.         int flag = 0;
  9.         for(int i = 0; i < T.length; i++) {
  10.             if(flag == 0) {
  11.                 for(int j = 0; j < T.length; j++) {
  12.                     if(flag == 0) {
  13.                         for(int k = 0; k < T.length; k++) {
  14.                             if(flag == 0) {
  15.                                 if(i != j && j != k && i != k) {
  16.                                     if(T[i] == T[j] && T[j] == T[k]) {
  17.                                         System.out.println("合格的产品已经找到: " + i + j + k);
  18.                                         flag = 1;
  19.                                         break;
  20.                                     } else {
  21.                                         System.out.println("算法仍在继续....");
  22.                                     }
  23.                                 }
  24.                             } else {
  25.                                 break;
  26.                             }
  27.                         }
  28.                     } else {
  29.                         break;
  30.                     }
  31.                 }
  32.             } else {
  33.                 break;
  34.             }
  35.         }
  36.     }
  37. }
复制代码
帮lz优化了一下代码的格式
作者: 王家俊    时间: 2011-10-7 22:21
因为4瓶药在开始时每粒要的重量是一样的,但后来有一瓶受污染,每粒药重量增加了一点,所以说明完好的那3瓶的哈希值和equals比较的值是相同的,但污染的那瓶虽然哈希值和其他3瓶相同但equals比较的值却不一样,这样就可以HashSet把他们都存入,谁在最后一个位置谁就是受污染的(HashMap存储是按照值的大小从小到大存储的。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2