面試題:1000瓶水其中有一瓶水有毒,有10只老鼠並且只要老鼠喝了有毒的水必死。請問怎樣通過一次實驗找出有毒的那瓶水。
阿新 • • 發佈:2019-02-05
import java.util.Arrays; import java.lang.StringBuilder; import java.util.Scanner; public class toxicWater { public static final int waterNumber = 1000;//水的數目 public static final int mouseNumber = 10;//老鼠的數目 public static void main(String args[]){ int water[] = new int[waterNumber]; int mouse[] = new int[mouseNumber]; int i,j; String s; StringBuffer sb; int flag = 1; Scanner reader = new Scanner(System.in); // System.out.println("請輸入老鼠的存活情況,1 表示死了,0表示還活著:"); for( i=0; i<mouseNumber; i++){ System.out.println("請輸入第"+i+"老鼠的存活情況(1 表示死了,0表示還活著)"); mouse[i] = reader.nextInt(); } for( i=0; i<mouseNumber; i++ ){//mouseNumber只老鼠 for( j=0; j<waterNumber; j++ ){//1000瓶水 s = Long.toBinaryString(j);//將 j 轉換為二進位制 sb = new StringBuffer(s); sb.reverse();//將字串反轉 if( sb.length() >= i+1 ){//字串長度 if( mouse[i] == 1 ){//老鼠死了 if( sb.charAt(i) == '1'){//第i只老鼠喝了第j瓶水 water[j]--; } } else{//老鼠未死 if( sb.charAt(i) == '1'){ water[j]++; } } } } } int min = 0; for( i=0; i<waterNumber; i++ ){//找出數值最小的water if( water[i] < min ){ min = water[i]; flag = i; } } if( min < 0 ){ System.out.println("第瓶"+flag+"瓶水有毒!!!"); } else{ System.out.println("第瓶0瓶水有毒!!!"); } } }