黑马程序员技术交流社区
标题:
今天我看到一些习题,希望大家帮下忙。做一下。。
[打印本页]
作者:
韩秀山
时间:
2013-5-13 20:21
标题:
今天我看到一些习题,希望大家帮下忙。做一下。。
有10袋金币,每袋100个。其中一袋全是假的,真的重10克,假的重9克。计算几次可以知道哪袋是假的。
作者:
long
时间:
2013-5-13 21:36
楼主我帮你做,等我。
作者:
long
时间:
2013-5-13 22:22
/**题目:有10袋金币,每袋100个。其中一袋全是假的,真的重10克,假的重9克。计算几次可以知道哪袋是假的。
*分析:本题其实很简答,只要数学基础不太差,几乎不费吹灰之力就做出来。给10袋金币编号1至10,从第1袋
*拿1块金币,从第2袋拿两块金币...从第10袋拿10块金币,把拿出的55块金币放到一起去称,如果第1袋为假,
*则总重量为549克,如果第2袋为假,则总重量为548克,... 如果第10袋为假,则总重量为540克。所以只需称
*一次就可知哪袋是假的。将解题过程转换成java程序的步骤如下:
*1、定义1个Random变量,用于生成1至10的某个数
*2、定义1个2维int数组(10*100),用于保存每块金币的重量。
*3、打印每袋金币的第一块金币的重量(因为每袋有100块,全部打印出来共1000个整数,有点吓人)
*4、定义一个int变量sum用于保存取出的金币的总重量。
*5、10 - sum%10 表示假金币的编号
*/
import java.util.*;
public class Calculate{
public static void main(String[] args){
Random rand = new Random();//定义一个随机数种子rand
int bagNum = rand.nextInt(10) + 1;//那袋假金币编号为1至10中的某个数,rand.nextInt(10)产生
//0至9中的某个数,所以后面要加1
int[][] arr = new int[10][100];//定义一个二维数组的引用
for(int i = 0; i < arr.length; i++)
arr[i] = new int[100];//定义10个一维数组的引用
for(int i = 0; i < arr.length; i++){
//因为数组下标是从0开始的,所以假金币编号对应的数组下标是bagNum - 1
if(i == (bagNum - 1)){
for(int j = 0; j < arr[i].length; j++)
arr[i][j] = 9;//每块假金币的重量都是9克
}
else{
for(int j = 0; j < arr[i].length; j++)
arr[i][j] = 10;//每块真金币的重量都是10克
}
}
for(int i = 0; i < arr.length; i++)
System.out.println("第" + (i+1) + "袋每块金币重 " + arr[i][0] + " 克");
int sum = 0;//sum用于存储拿出的55块金币的总重量
/**从第1袋拿1块金币,从第2袋拿两块金币...从第10袋拿10块金币,i+1表示拿出的金币
数量,arr[i][0]表示金币的重量*/
for(int i = 0; i < arr.length; i++)
sum += (i+1) * arr[i][0];//每迭代一次都加上新拿出的金币的重量
System.out.println("\n经过1次计算,可知第 " + (10 - sum%10) + " 袋金币为假");
}
}
复制代码
作者:
long
时间:
2013-5-14 15:36
没天理啊,写得这么辛苦,居然不加技术分。强烈抗议!!!!!!!!!!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2