当前位置: 代码迷 >> 综合 >> Day08 JavaBasic05
  详细解决方案

Day08 JavaBasic05

热度:89   发布时间:2023-12-24 07:47:20.0
  1. 一个楼梯有n (n >= 1)级,每次走1级或两级,请问从1级台阶走到第n级台阶一共有多少种走法(假设一开始站在第0级台阶上)
package com.cskaoyan.homework;
import java.util.*;
/*** 一个楼梯有n (n >= 1)级,每次走1级或两级,请问从1级台阶走到第n级台阶一共有多少种走法(假设一开始站在第0级台阶上)* 分析:n=1 1 1种* [1,0]* n=2 1+1、2 2种* [1,0]->[1+0,1]* n=3 1+1+1、1+2、 2+1 3种* [1,1]->[1+1,1]* n=4 1+1+1+1、1+1+2、 1+2+1、 2+1+1、 2+2 5种* [2,1]->[2+1,2]* n=5 1+1+1+1+1、1+1+1+2、 1+1+2+1、 1+2+1+1、1+2+2、 2+1+1+1、2+1+2、 2+2+1、 8种* [3,2]->[3+2,3]* ... ...*/
public class Work01 {
    public static void main(String[] args) {
    int[] arr = new int[]{
    0, 1};//假设为n=0的情况System.out.println("请输入台阶数:");Scanner sc = new Scanner(System.in);int n = sc.nextInt();while(n != 0){
    arr = func(arr);n--;}int sum = arr[0] + arr[1];                   //注:arr[0]的值是最后一步为1阶梯的情况数//arr[1]的值是最后一步为2阶梯的情况数System.out.println("一共有" + sum + "种走法");sc.close();}public static int[] func(int[] arr){
    int[] tmp = new int[2];tmp[0] = arr[0] + arr[1];tmp[1] = arr[0];return tmp;}
}

测试:
在这里插入图片描述

  1. 计算n条直线最多能把平面分成多少部分? n >= 1
package com.cskaoyan.homework;import java.util.*;
/*** 计算n条直线最多能把平面分成多少部分? n >= 1* 原理:第N条直线可以被前N-1条直线分为N段,对于 每1段则将平面分为两份,所以* f(n)=f(n-1)+n。* f(n-1)=f(n-2)+n-1* ......* f(1)=f(0)+1;* f(0)=1;*/
public class Work02 {
    public static void main(String[] args) {
    System.out.println("请输入直线数:");Scanner sc = new Scanner(System.in);int n = sc.nextInt();System.out.println(n + "条直线最多能把平面分成" + func(n) + "部分");}public static int func(int n){
    if(n == 0)return 1;elsereturn func(n - 1) + n;}
}

测试:
在这里插入图片描述

  1. 猴子第一天摘了若干个桃子,当即吃了一半,还不解馋,又多吃了一个; 、 第二天,吃剩下的桃子的一半,还不过瘾,又多吃了一个; 以后每天都吃前一天剩下的一半多一个,到第10天想再吃时,只剩下一个桃子了。 问第i(i的取值范围为[1, 10])天的桃子个数?
package com.cskaoyan.homework;/*** 猴子第一天摘了若干个桃子,当即吃了一半,还不解馋,又多吃了一个; 、* 第二天,吃剩下的桃子的一半,还不过瘾,又多吃了一个;* 以后每天都吃前一天剩下的一半多一个,到第10天想再吃时,只剩下一个桃子了。* 问第i(i的取值范围为[1, 10])天的桃子个数?** 分析:* 001 002 003 004 005 006 007 008 009 010* n 10 4 1** n -> n/2-1 -> (n/2-1)/2-1 ->...* ...<- (((1+1)*2)+1)*2 <- (1+1)*2 <- 1*/
public class Work03 {
    public static void main(String[] args) {
    int sum = func(9);for(int i = 1;i <= 10;i++){
    System.out.println("第" + i + "天的桃子个数为" + func(10 - i) +"个。");}}public static int func(int n){
    if(n == 0)return 1;elsereturn (func(n - 1) + 1) * 2;}
}

测试:
在这里插入图片描述