A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

有10袋金币,每袋100个。其中一袋全是假的,真的重10克,假的重9克。计算几次可以知道哪袋是假的。

4 个回复

倒序浏览
楼主我帮你做,等我。
回复 使用道具 举报
  1. /**题目:有10袋金币,每袋100个。其中一袋全是假的,真的重10克,假的重9克。计算几次可以知道哪袋是假的。
  2. *分析:本题其实很简答,只要数学基础不太差,几乎不费吹灰之力就做出来。给10袋金币编号1至10,从第1袋
  3. *拿1块金币,从第2袋拿两块金币...从第10袋拿10块金币,把拿出的55块金币放到一起去称,如果第1袋为假,
  4. *则总重量为549克,如果第2袋为假,则总重量为548克,... 如果第10袋为假,则总重量为540克。所以只需称
  5. *一次就可知哪袋是假的。将解题过程转换成java程序的步骤如下:
  6. *1、定义1个Random变量,用于生成1至10的某个数
  7. *2、定义1个2维int数组(10*100),用于保存每块金币的重量。
  8. *3、打印每袋金币的第一块金币的重量(因为每袋有100块,全部打印出来共1000个整数,有点吓人)
  9. *4、定义一个int变量sum用于保存取出的金币的总重量。
  10. *5、10 - sum%10 表示假金币的编号
  11. */

  12. import java.util.*;

  13. public class Calculate{
  14.         public static void main(String[] args){
  15.                 Random rand = new Random();//定义一个随机数种子rand
  16.                 int bagNum = rand.nextInt(10) + 1;//那袋假金币编号为1至10中的某个数,rand.nextInt(10)产生
  17.                                                    //0至9中的某个数,所以后面要加1
  18.                 int[][] arr = new int[10][100];//定义一个二维数组的引用
  19.                
  20.                 for(int i = 0; i < arr.length; i++)
  21.                         arr[i] = new int[100];//定义10个一维数组的引用
  22.                
  23.                 for(int i = 0; i < arr.length; i++){
  24.                         //因为数组下标是从0开始的,所以假金币编号对应的数组下标是bagNum - 1
  25.                         if(i == (bagNum - 1)){
  26.                                 for(int j = 0; j < arr[i].length; j++)
  27.                                         arr[i][j] = 9;//每块假金币的重量都是9克
  28.                         }
  29.                         else{
  30.                                 for(int j = 0; j < arr[i].length; j++)
  31.                                         arr[i][j] = 10;//每块真金币的重量都是10克
  32.                         }
  33.                 }
  34.                
  35.                 for(int i = 0; i < arr.length; i++)
  36.                         System.out.println("第" + (i+1) + "袋每块金币重 " + arr[i][0] + " 克");
  37.                
  38.                 int sum = 0;//sum用于存储拿出的55块金币的总重量
  39.                 /**从第1袋拿1块金币,从第2袋拿两块金币...从第10袋拿10块金币,i+1表示拿出的金币
  40.                 数量,arr[i][0]表示金币的重量*/
  41.                 for(int i = 0; i < arr.length; i++)
  42.                         sum += (i+1) * arr[i][0];//每迭代一次都加上新拿出的金币的重量
  43.                
  44.                 System.out.println("\n经过1次计算,可知第 " + (10 - sum%10) + " 袋金币为假");
  45.                
  46.         }
  47. }
复制代码
回复 使用道具 举报
没天理啊,写得这么辛苦,居然不加技术分。强烈抗议!!!!!!!!!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马