栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

蓝桥杯-乌托邦树

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

蓝桥杯-乌托邦树

传送门

题目描述
实现一个算法得到乌托邦树的高度,介绍如下:
乌托邦树每年经历 2 个生长周期。每年春天,它的高度都会翻倍。每年夏天,它的高度都会增加 1 米。 对于一颗在春天开始时种下的高 1 米的树,问经过指定周期后,树的高度为多少。
输入描述
输入一个数字 N (0≤N≤1000),表示指定周期。
输出描述
输出一个数字,为经过指定周期后树的高度。

由于N的数值是0到1000,所以本来以为暴力过不了,结果居然过了。。
代码很简单

暴力解法
 import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改

public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
       int x = scan.nextInt();
       int sum = 1;
       int i ;
    
      for( i = 0; i < x ; i++){
        if(i % 2 == 0){
        sum = sum *2;}
        else{
        sum = sum +1;}
      }
        System.out.println(sum);
        scan.close();
    }
} 

这里应该采用java的高精度描述,以下是Java高精度描述的两种方式。

方式一
import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改

public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        //树的生长周期树
        int n=scan.nextInt();
        int h[]=new int[10000005];
        //树高度的位数
        int b=1;
        //树的高度初始值为1米
        h[0]=1;
        //如果flag为1则是春天,为0则是夏天
        int flag=1;
        while(n>0){
          //每年春天,树的高度会翻倍,将树的高度各位的数值乘以2,之后再进行进位处理
          if(flag==1){
            for(int i=0;i=10){
              h[i+1]+=(h[i]/10);
              h[i]%=10;
            }
          }
          if(h[b]!=0)
          {
            b++;
          }
          n--;
        }
        for(int i=b-1;i>=0;i--){
          System.out.print(h[i]);
        }
        scan.close();
    }
}
方式二
import java.util.Scanner;
import java.math.BigInteger;
// 1:无需package
// 2: 类名必须Main, 不可修改

public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        //树的生长周期
        int n=scan.nextInt();
        //树的初始高度为1
        BigInteger h=new BigInteger("1");
        //如果flag为1则是春天,为0则是夏天
        int flag=1;
        while(n!=0){
          if(flag==1){
            //春天树的高度加倍,用add方法进行加法运算
            h=h.add(h);
            flag=0;
          }
          else{
            //夏天树的高度增加1米
            h=h.add(new BigInteger("1"));
            flag=1;
          }
          n--;
        }
        //输出结果
        System.out.println(h);
        scan.close();
    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/582076.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号