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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Fangjie 中级黑马   /  2016-6-13 20:13  /  992 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

题目:有一个八层灯塔,每层的灯数都是上层的一倍,共有765盏灯,编程求最上层和最下层的灯数?

9 个回复

倒序浏览
求大神过来解题.
回复 使用道具 举报
//定义一个数组用于存储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;
                        }
                }
回复 使用道具 举报
每层的灯数都是上一层的一倍,说明每层的灯数都是一样的,共有8层,765盏,所以每层有765/8=92.625盏灯。
回复 使用道具 举报
两种方法  原理是一样的,答案是最上层是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));
        }
}
回复 使用道具 举报
fracong 发表于 2016-6-15 21:47
两种方法  原理是一样的,答案是最上层是3,最下层是384
方法一:
                             for (int y = 1; y < 10; ...

学习了!
回复 使用道具 举报
fracong 发表于 2016-6-15 21:47
两种方法  原理是一样的,答案是最上层是3,最下层是384
方法一:
                             for (int y = 1; y < 10; ...

谢谢,学习了!
回复 使用道具 举报
LCR 中级黑马 2016-6-17 15:24:18
8#
不错,不错,学习下
回复 使用道具 举报
学习啦
回复 使用道具 举报
学习了,谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马