黑马程序员技术交流社区

标题: 每日一题 [打印本页]

作者: Fangjie    时间: 2016-6-13 20:13
标题: 每日一题
题目:有一个八层灯塔,每层的灯数都是上层的一倍,共有765盏灯,编程求最上层和最下层的灯数?

作者: java小白怕不    时间: 2016-6-13 20:59
求大神过来解题.
作者: Fangjie    时间: 2016-6-14 18:16
//定义一个数组用于存储8层灯塔每一层的灯数
                int[] arr = new int[8];
                //定义变量sum用于存储8层灯塔的所以灯数;
                int sum=0;
                //开始循环,假设第一层灯塔的灯数为1-765盏,
                //则其它层的灯数按照要求做运算.
                for(int y=1;y<765;y++){
                        arr[0]=y;
                        sum=y;
                        for(int x=1;x<8;x++){
                                arr[x] = arr[x-1]/2;
                                sum+=arr[x];
                        }
                        //当计算的总灯数等于765盏时,变量结果,然后退出
                        if(sum==765){
                                for(int x=0;x<8;x++){
                                        System.out.println("第"+(x+1)+"层灯塔有"+arr[x]+"盏灯数");                                       
                                }
                                break;
                        }
                }
作者: sangwentao    时间: 2016-6-14 19:29
每层的灯数都是上一层的一倍,说明每层的灯数都是一样的,共有8层,765盏,所以每层有765/8=92.625盏灯。
作者: fracong    时间: 2016-6-15 21:47
两种方法  原理是一样的,答案是最上层是3,最下层是384
方法一:
                             for (int y = 1; y < 10; y++) {
                        int sum = 0;
                        for (int x = 1; x <= Math.pow(2,7); x*=2){
                                sum = sum + y*x;
                        }
                        if (sum == 765) {
                                System.out.println("最上层的灯数是:" + y + "最下层的灯数是:" + y*Math.pow(2,7));
                                break;
                        }       
                }
方法二:
for (int j = 1;j<=5 ;j++ ) {
               
        int sum =0;
        for (int i =1;i <= 8 ;i++ ) {
        sum =sum+j*(1 << (i - 1));
        }
        if (sum == 765) {
        System.out.println("最上层灯数为:" + j +",最下层的灯数为:" + j * (1 << 7));
        }
}
作者: Fangjie    时间: 2016-6-17 06:08
fracong 发表于 2016-6-15 21:47
两种方法  原理是一样的,答案是最上层是3,最下层是384
方法一:
                             for (int y = 1; y < 10; ...

学习了!
作者: Fangjie    时间: 2016-6-17 06:17
fracong 发表于 2016-6-15 21:47
两种方法  原理是一样的,答案是最上层是3,最下层是384
方法一:
                             for (int y = 1; y < 10; ...

谢谢,学习了!
作者: LCR    时间: 2016-6-17 15:24
不错,不错,学习下
作者: TCK8888    时间: 2016-6-17 15:35
学习啦
作者: wsl123456    时间: 2016-6-17 22:15
学习了,谢谢




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