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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

feng19900123

中级黑马

  • 黑马币:90

  • 帖子:37

  • 精华:0

问题:
(1)珠穆朗玛峰高度为8848米,有一张足够大的纸,厚度为0.001米。
(2)请问,我折叠多少次,可以折成珠穆朗玛峰的高度。
分析
折叠次数        1        2        3        4……n
纸的层数        2        4        8        16……2^i,使2向左位移i次
        计算2的折叠次数幂
方法1:
  1. class Demo {
  2.         public static void main(String[] args) {
  3.                 double page = 0.001;
  4.                 double hill = 8848.0;
  5.                 double high = 0;
  6.                 long i = 0;
  7.                 while (high <= hill) {
  8.                         high = (2 << i) * page;                        //使2向左位移i次,左移时,i = 0时相当于已经折叠了一次,
  9.                         i++;       
  10.                         System.out.println(high);
  11.                 }
  12.                 System.out.println(i);        //
  13.         }
  14. }
复制代码

方法2:

class Demo3 {
        public static void main(String[] args) {
                double page = 0.001;
                double hill = 8848.0;
                double high = 0;
                long i = 0;
                while (high <= hill) {
                        high = Math.pow(2,i) * page;        //Math.pow(x,y)调用数学类中幂次方方法
                        i++;       
                }
                System.out.println(i-1);
        }
}

大家有什么好的方法,欢迎回复!

4 个回复

倒序浏览
class Demo
{
        public static int num(double a,double b)
        {
                int i;
                for(i=0;a<=b;i++)
                {
                        a=a*2;
                }
                return i;
        }
        public static void main(String[] args)
        {
                double page = 0.001;
        double hill = 8848.0;
                System.out.println(num(page,hill));
        }
}

感觉跟你的没啥区别
回复 使用道具 举报
  1. class ZhuFeng {
  2.         public static void main(String[] args) {
  3.      double zhi = 0.001;    //定义一个变量记住纸的数值。
  4.          double shan = 8848.0;  //定义一个变量记住山的数值。
  5.          double zhehou = 0;   //定义个变量记住折叠后纸的数值。
  6.          int cishu = 0;      //定义个计数器,来记住折叠次数。
  7.          

  8.          while (zhehou < shan){
  9.                  zhehou = (2<<cishu)*zhi;   //2向左移几次就相当于2的几次幂。
  10.                   cishu++;                  //如果移一次就相当于 2*2,移两次就相当于2*2*2     
  11.                                             // 移三次就相当于2*2*2*2
复制代码
回复 使用道具 举报
666666666666666666
回复 使用道具 举报
/*
        我国最高山峰是珠穆朗玛峰:8848m,我现在有一张足够大的纸张,厚度为:0.01m。
        请问,我折叠多少次,就可以保证厚度不低于珠穆朗玛峰的高度?

        分析:
                A:定义一个统计变量,默认值是0
                B:最高山峰是珠穆朗玛峰:8848m这是最终的厚度
                  我现在有一张足够大的纸张,厚度为:0.01m这是初始厚度
                C:我折叠多少次,就可以保证厚度不低于珠穆朗玛峰的高度?
                  折叠一次有什么变化呢?就是厚度是以前的2倍。
                D:只要每次变化的厚度没有超过珠穆朗玛峰的高度,就折叠,统计变量++
                E:输出统计变量。
*/

class WhileDemo5 {
        public static void main(String[] args) {
                //定义一个统计变量,默认值是0
                int count = 0;
               
                //最高山峰是珠穆朗玛峰:8848m这是最终的厚度
                //我现在有一张足够大的纸张,厚度为:0.01m这是初始厚度
                //为了简单,我把0.01变成1,同理8848就变成了884800
                int end = 884800;
                int start = 1;
               
                while(start<end) {
                        //只要每次变化的厚度没有超过珠穆朗玛峰的高度,就折叠,统计变量++
                        count++;
                       
                        //折叠一次有什么变化呢?就是厚度是以前的2倍。
                        start *= 2;
                       
                        System.out.println("第"+count+"次厚度是"+start);
                }
               
                //输出统计变量。
                System.out.println("要叠"+count+"次");
        }
}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马