zoukankan      html  css  js  c++  java
  • day07作业---------二维数组 & 递归

    作业:

      1. 输入一个 m*n的矩阵和一个n*p的矩阵,并初始化, 要求打印出两个矩阵的乘积(两个矩阵数据,分别存储在两个二维数组中)

      2. 一个楼梯有n (n >= 1)级,每次走1级或两级,请问从1级台阶走到第n级台阶一共有多少种走法(假设一开始站在第0级台阶上)

      3. 计算n条直线最多能把平面分成多少部分? n >= 1  

      4. 猴子第一天摘了若干个桃子,当即吃了一半,还不解馋,又多吃了一个; 第二天,吃剩下的桃子的一半,还不过瘾,又多吃了一个;以后每天都吃前一天剩下的一半多一个,到第10天想再吃时,只剩下一个桃子了。问第i(i的取值范围为[1, 10])天的桃子个数?

    答案:

    1.

     1 package com.day007;
     2 
     3 import java.util.Scanner;
     4 
     5 /*
     6  * 1.  输入一个 m*n的矩阵和一个n*p的矩阵,并初始化, 
     7  * 要求打印出两个矩阵的乘积(两个矩阵数据,分别存储在两个二维数组中)
     8  * 
     9  * 分析:
    10  * 1.一个 m*n的矩阵A和一个n*p的矩阵B相乘,得到一个m*p的矩阵C
    11  * 2.C矩阵中Cij位置的值为A矩阵第i行元素与B矩阵第j列元素对应相乘,再取乘积之和
    12  */
    13 public class Demo1 {
    14     public static void main(String[] args) {
    15         System.out.println("求m行n列的矩阵A和n行p列的矩阵B的乘积矩阵C");
    16         Scanner sc = new Scanner(System.in);
    17         System.out.println("请输入矩阵A的行数m:");
    18         int m = sc.nextInt();
    19         System.out.println("请输入矩阵A的列数n:");
    20         int n = sc.nextInt();
    21         System.out.println("请输入矩阵B的列数p:");
    22         int p = sc.nextInt();
    23         
    24         int arr1[][] = new int[m][n];//矩阵为m*n的矩阵
    25         int arr2[][] = new int[n][p];//矩阵为n*p的矩阵
    26         
    27         //为m*n矩阵传入初始值
    28         System.out.println("请为矩阵A赋初值:");
    29         for(int i = 0; i < m; i++) {
    30             for(int j = 0; j < n; j++) {
    31                 arr1[i][j]=sc.nextInt();//向矩阵arr1中输入数据
    32             }
    33         }
    34     
    35         //为n*p矩阵传入初始值
    36         System.out.println("请为矩阵B赋初值:");
    37         for(int i = 0; i < m; i++) {
    38             for(int j = 0; j < n; j++) {
    39                 arr2[i][j]=sc.nextInt();//向矩阵arr2中输入数据
    40             }
    41         }
    42         sc.close();
    43         //两数组相乘
    44         int[][] arr = new int[m][p];//创建矩阵用于存放乘积
    45         for(int i = 0; i< m; i++) {//矩阵行控制量
    46             for(int j = 0; j< p; j++) {//矩阵列控制量
    47                 for(int k = 0; k < n; k++) {//矩阵arr的列
    48                     arr[i][j] = arr1[i][k]+arr2[k][j];//给矩阵arr元素赋值
    49                 }
    50             }
    51         }
    52         
    53         //输出乘积矩阵arr
    54         System.out.println("乘积矩阵C为:");
    55         for(int i = 0; i < m; i++) {
    56             for(int j = 0; j < p; j++) {
    57                 System.out.print(arr[i][j]+" ");
    58             }
    59             System.out.println();
    60         }
    61     }
    62 }
    63     

    输出结果:

    2.

     1 package com.day007;
     2 
     3 import java.util.Scanner;
     4 
     5 /*
     6  * 2. 一个楼梯有n (n >= 1)级,每次走1级或两级,
     7  * 请问从1级台阶走到第n级台阶一共有多少种走法(假设一开始站在第0级台阶上)
     8  * 
     9  * 分析:假设有n级台阶,m种走法,则
    10  * 台阶数         1     2      3     4     5   ...        n
    11  * 走法m  -- 1     2      3     5     8   ...  f(n-1)+f(n-2)
    12  */
    13 public class Demo2 {
    14     public static void main(String[] args) {
    15         Scanner sc = new Scanner(System.in);
    16         int n = sc.nextInt();
    17         int m = method(n);
    18         System.out.println("当有"+n+"阶台阶时,一共有"+m+"种走法。");
    19         sc.close();
    20     }
    21     
    22     public static int method(int n) {
    23         if(n == 1) {
    24             return 1;
    25         }
    26         if(n == 2) {
    27             return 2;
    28         }
    29         return method(n-1) + method(n-2);
    30     }
    31 }

    运行结果:

    3.

     1 package com.day007;
     2 
     3 import java.util.Scanner;
     4 
     5 /*
     6  * 3. 计算n条直线最多能把平面分成多少部分? n >= 1
     7  * 分析:
     8  * 当有n条直线时,平面分成m面
     9  * 直线                    1   2  3  4  5   ...      n
    10  * 面f(n)    2   4  7  11 16  ...  f(n-1)+n
    11  *  数学计算公式为:n*(n+1)/2 +1
    12  */
    13 public class Demo3 {
    14     public static void main(String[] args) {
    15         Scanner sc = new Scanner(System.in);
    16         int n = sc.nextInt();//当有N条直线时
    17         int m = parts(n);//把平面分成M面
    18         System.out.println("当有"+n+"条直线时,把平面分成"+ m +"面");
    19         sc.close();
    20     }
    21     public static int parts(int n) {
    22         if(n == 1) {
    23             return 2;
    24         }
    25         return parts(n-1)+n;
    26     }
    27     
    28 }

    运行结果:

    4.

     1 package com.day007;
     2 
     3 import java.util.Scanner;
     4 
     5 /*
     6  * 4. 猴子第一天摘了若干个桃子,当即吃了一半,还不解馋,又多吃了一个; 
     7 第二天,吃剩下的桃子的一半,还不过瘾,又多吃了一个;
     8 以后每天都吃前一天剩下的一半多一个,到第10天想再吃时,只剩下一个桃子了。
     9 问第i(i的取值范围为[1, 10])天的桃子个数?
    10 
    11 分析:第i天,有桃子m个
    12 天数i     10    9   8   7   ...     i
    13 桃子数m    1    4   10  22  ...  2*f(i+1)+2 
    14  */
    15 public class Demo4 {
    16     public static void main(String[] args) {
    17         System.out.println("请输入天数,取值范围为1到10:");
    18         Scanner sc = new Scanner(System.in);
    19         int day = sc.nextInt();
    20         int ge = sum(day);
    21         System.out.println("第"+day+"天的桃子个数为"+ge);
    22         sc.close();
    23     }
    24     
    25     public static int sum(int day) {
    26         if(day == 10) {
    27             return 1;
    28         }
    29         return 2*sum(day+1)+2;
    30     }
    31     
    32 }

    运行结果:

  • 相关阅读:
    思岚 激光雷达 A3 使用官方sdk读取数据
    思岚激光雷达 开箱使用
    ubuntu 更新软件失败
    ubuntu 安装tftp
    Ubuntu 安装Telnet服务
    【博客搬至CSDN】
    【RabbitMQ】一文带你搞定springboot整合RabbitMQ涉及消息的发送确认,消息的消费确认机制,延时队列的实现
    基于JVisualVM的可视化监控
    LCN解决分布式事务原理解析+项目实战(原创精华版)
    springboot 用监听器统计在线人数案例分析
  • 原文地址:https://www.cnblogs.com/dust2017/p/12706351.html
Copyright © 2011-2022 走看看