zoukankan      html  css  js  c++  java
  • 【原】Java学习笔记009

     1 package cn.temptation;
     2 
     3 public class Sample01 {
     4     public static void main(String[] args) {
     5         // 1、需求:打印如下图形
     6         /*
     7          * *       *
     8          *  *     *
     9          *   *   *
    10          *    * *
    11          *     *
    12          *    * *
    13          *   *   *
    14          *  *     *
    15          * *       *
    16          */
    17         
    18         // 打印上部
    19         for (int i = 0; i < 5; i++) {
    20             // 打印空格
    21             for (int j = 0; j < i; j++) {
    22                 System.out.print(" ");
    23             }
    24             
    25             // 打印星号
    26             System.out.print("*");
    27             
    28             // 打印空格
    29             for (int j = 0; j < 7 - i * 2; j++) {
    30                 System.out.print(" ");
    31             }
    32             
    33             // 打印星号
    34             if (i != 4) {        // 第5行时不打印后面的星号
    35                 System.out.print("*");
    36             }
    37             
    38             // 换行
    39             System.out.println();
    40         }
    41         
    42         // 打印下部
    43         for (int i = 0; i < 4; i++) {
    44             // 打印空格
    45             for (int j = 0; j < 3 - i; j++) {
    46                 System.out.print(" ");
    47             }
    48             
    49             // 打印星号
    50             System.out.print("*");
    51             
    52             // 打印空格
    53             for (int j = 0; j < i * 2 + 1; j++) {
    54                 System.out.print(" ");
    55             }
    56             
    57             // 打印星号
    58             System.out.print("*");
    59             
    60             // 换行
    61             System.out.println();
    62         }
    63     }
    64 }
     1 package cn.temptation;
     2 
     3 public class Sample02 {
     4     public static void main(String[] args) {
     5         // 2、需求:猴子第一天早上摘下若干个桃子,当即吃了一半,觉得不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。
     6         //            以后每天早上都多吃了前一天的一半零一个。到第10天早上再吃时,发现就剩下一个桃子了。求第一天共摘了多少个桃子。
     7                 
     8         // 思路:正向思维比较复杂时,可以考虑逆向思维,把第10天看成逆向的第1天,第9天看成逆向的第2天,...
     9         
    10         int count = 1;
    11         
    12         for (int i = 2; i <= 10; i++) {
    13             count = (count + 1) * 2;
    14         }
    15         
    16         System.out.println("第一天共摘了" + count + "个桃子");
    17     }
    18 }
     1 package cn.temptation;
     2 
     3 public class Sample03 {
     4     public static void main(String[] args) {
     5         // 3、需求:商店里篮球原价为78元一个,现在为了促销,推出了买5个送1个的活动,波波维奇需要35个球,问他需要花多少钱?
     6         
     7         // 单价
     8         int price = 78;
     9         // 购买的篮球数
    10         int number = 1;
    11         // 赠送的篮球数
    12         int extendNumber = 0;
    13         // 需求的篮球数
    14         int totalNumber = 35;
    15         
    16         for(;;) {
    17             // 买5个送1个,赠送的数量加在赠送的篮球数的变量上
    18             if (number % 5 == 0) {
    19                 extendNumber++;
    20             }
    21             
    22             // 购买的篮球数量 + 赠送的篮球数量 达到  需要的篮球数量,就跳出这个死循环
    23             if (number + extendNumber >= totalNumber) {
    24                 break;
    25             }
    26             
    27             number++;
    28         }
    29         
    30         System.out.println("波波维奇需要35个球,问他需要花" + (number * price) + "元");
    31     }
    32 }
     1 package cn.temptation;
     2 
     3 public class Sample04 {
     4     public static void main(String[] args) {
     5         // 4、需求:网红开网店,工作日营业,休息日出去玩。工作日每天随机得到150~200元,休息日每天随机花费100~150元,问需要经过多少天,她才能存到5201314元
     6         //           (假设她是从某一个周一开始计算)
     7         //           提示:随机数使用Math.random()方法
     8                 
     9         // 思路:
    10         // 最终存下来的钱        =     赚的钱                    -               花的钱
    11         //                         (工作日)                        (休息日)
    12         
    13         // 1、研究随机数的产生
    14         // Math 类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。
    15         // 常用的成员方法:
    16         // static double random() :返回带正号的 double 值,该值大于等于 0.0 且小于 1.0。 
    17 //        System.out.println(Math.random());
    18         // 150 ~ 200 -----> 150 + 0 ~ 150 + 50 -----> 150 + Math.random() * 50
    19         // 100 ~ 150 -----> 100 + 0 ~ 100 + 50 -----> 100 + Math.random() * 50
    20 //        System.out.println((int)(150 + Math.random() * 50));
    21 //        System.out.println((int)(100 + Math.random() * 50));
    22         
    23         // 2、根据赚钱  和  花钱 的规则,明显要使用选择结构
    24         
    25         // 3、研究工作日 和 休息日的判定
    26         //    可以类比使用 %10 获取个位数字(因为那是十进制),这里一周七天(理解为七进制),所以可以通过 %7 获取是星期几
    27         
    28         // 定义天数
    29         int day = 1;
    30         // 定义存的钱数
    31         int totalMoney = 0;
    32         
    33         for(;;) {
    34             // 随机賺的钱
    35             int earnMoney = (int)(150 + Math.random() * 50);
    36             // 随机花的钱
    37             int payMoney = (int)(100 + Math.random() * 50);
    38             
    39             // 工作日 和 休息日 的业务逻辑
    40             switch (day % 7) {
    41             case 1:
    42             case 2:
    43             case 3:
    44             case 4:
    45             case 5:
    46                 // 工作日
    47                 totalMoney += earnMoney;
    48                 break;
    49             case 6:
    50             case 0:
    51                 totalMoney -= payMoney;
    52                 break;
    53             default:
    54                 System.out.println("输入错误");
    55                 break;
    56             }
    57             
    58             // 跳出死循环的条件
    59             if (totalMoney >= 5201314) {
    60                 break;
    61             }
    62             
    63             // 用时的天数需要自增
    64             day++;
    65         }
    66         
    67         System.out.println("需要经过" + day + "天,她才能存到5201314元");
    68     }
    69 }
     1 package cn.temptation;
     2 
     3 import java.util.Scanner;
     4 
     5 public class Sample05 {
     6     public static void main(String[] args) {
     7         // 5、需求:输入两个正整数,求其最大公约数 和 最小公倍数
     8         
     9         // 思路:
    10         // 最大公约数
    11         // 1、对输入的两个正整数进行大小比较
    12         // 2、用比较大的数除以比较小的数,如果两个数一样大,那么最大公约数就是其本身;
    13         //         如果较大的数正好可以整除较小的数,那么最大公约数就是较小的数;
    14         //        如果较大的数不能整除较小的数,将得到的余数作为新的较小的数,刚才的较小的数作为较大的数再去做除法,直到得到的余数为0为止
    15         
    16         // 最小公倍数:两个数的乘积除以最大公约数
    17         
    18         Scanner input = new Scanner(System.in);
    19         System.out.println("输入第一个数:");
    20         int i = input.nextInt();
    21         System.out.println("输入第二个数:");
    22         int j = input.nextInt();
    23         input.close();
    24         
    25         // 声明最大公约数
    26         int gcd = 0;
    27 
    28         // 获取两个数的乘积(为了后续求最小公倍数时使用,否则后续这两个数字在循环中会发生改变)
    29         int result = i * j;
    30         
    31         // 求最大公约数
    32         // 1、对输入的两个正整数进行大小比较
    33         if (i < j) {
    34             int temp = i;
    35             i = j;
    36             j = temp;
    37         }
    38         
    39         // 2、用比较大的数除以比较小的数,如果两个数一样大,那么最大公约数就是其本身;
    40         //         如果较大的数正好可以整除较小的数,那么最大公约数就是较小的数;
    41         //            如果较大的数不能整除较小的数,将得到的余数作为新的较小的数,刚才的较小的数作为较大的数再去做除法,直到得到的余数为0为止
    42         // 注意:数学算式上      被除数     %   除数   =  商......余数
    43         
    44         while (j != 0) {
    45             if (i == j) {
    46                 gcd = i = j;
    47             } else {
    48                 // 对于当次循环操作,被除数     %   除数
    49                 gcd = i % j;
    50                 // 下面两句实际上是为下次循环的操作来做准备的,即这次循环中的除数移到被除数的位置、余数移到除数的位置
    51                 i = j;
    52                 j = gcd;
    53             }
    54         }
    55         
    56         // 循环结束时,就是余数为0时,最大公约数不是放在gcd这个变量中的,而是在i这个变量中
    57         gcd = i;
    58         System.out.println("最大公约数为:" + gcd);
    59         
    60         System.out.println("最小公倍数为:" + result / gcd);
    61     }
    62 }
      1 package cn.temptation;
      2 
      3 import java.util.Scanner;
      4 
      5 public class Sample06 {
      6     public static void main(String[] args) {
      7         // 6、需求:编写程序,实现Fibonacci数列的求解
      8         //           提示:Fibonacci数列    1、1、2、3、5、8、13、21、...
      9         
     10         // 思路:分析规律
     11         //      Fibonacci数列:第1项 和 第2项均为1;从第3项开始,值等于前面两项的和
     12         
     13         // 写法1、常规写法(使用循环)
     14         // 第3项 = 第2项 + 第1项
     15         // 第4项 = 第3项 + 第2项  = (第2项 + 第1项) + 第2项
     16         // 第5项 = 第4项 + 第3项  = ((第2项 + 第1项) + 第2项) + (第2项 + 第1项)
     17         
     18         // 写法2、使用递归
     19         // 递归:方法调用自身的写法称为递归
     20         // 从数学角度归纳公式
     21         // F(1) = 1
     22         // F(2) = 1
     23         // F(n) = F(n - 1) + F(n - 2) (n > 2)
     24         
     25         // F(n) = F(n - 1) + F(n - 2) -----> F(n - 1) = F(n - 1 - 1) + F(n - 1 - 2), F(n - 2) = F(n - 2 - 1) + F(n - 2 - 2)
     26         // .......   -----> F(3) = F(2) + F(1) = 1 + 1
     27         
     28         // 逆向思考一下
     29         // 位置            第一个位置        第二个位置
     30         // F(3)            F(2)       +    F(1)
     31         // F(4)            F(3)       +    F(2)
     32         
     33         Scanner input = new Scanner(System.in);
     34         System.out.println("输入项数:");
     35         int n = input.nextInt();
     36         input.close();
     37         
     38         System.out.println("该项的值为:" + Fibonacci(n));
     39         
     40 //        printFibonacci(n);
     41         
     42         System.out.println("该项的值为:" + FibonacciEx(n));
     43     }
     44     
     45     /**
     46      * 写法1、常规写法(使用循环)
     47      * 获取Fibonacci数列指定项的值
     48      * @param n:指定项数
     49      * @return:Fibonacci数列指定项对应的值
     50      */
     51     public static int Fibonacci(int n) {
     52         // 第1项
     53         int i = 1;
     54         // 第2项
     55         int j = 1;
     56         // 定义当次结果
     57         int tempResult = 0;
     58         // 定义最终结果
     59         int result = 0;
     60         
     61         if (n <= 2 && n > 0) {
     62             result = i = j = 1;
     63         } else {
     64             // 使用循环来实现
     65             for (int k = 3; k <= n; k++) {
     66                 // 计算出当次结果
     67                 tempResult = i + j;
     68                 // 为了给下一次循环使用,调整一下i位置上 和 j位置上的值
     69                 j = i;
     70                 i = tempResult;
     71             }
     72             
     73             result = tempResult;
     74         }
     75         
     76         return result;
     77     }
     78     
     79     /**
     80      * 写法1、常规写法(使用循环)
     81      * 打印Fibonacci数列的指定项之前所有的值
     82      * @param n
     83      */
     84     public static void printFibonacci(int n) {
     85         // 第1项
     86         int i = 1;
     87         // 第2项
     88         int j = 1;
     89         // 定义当次结果
     90         int tempResult = 0;
     91 
     92         // 使用循环来实现
     93         for (int k = 1; k <= n; k++) {
     94             if (k <= 2 && k > 0) {
     95                 tempResult = i = j = 1;
     96                 System.out.print(tempResult + "	");
     97             } else {
     98                 // 计算出当次结果
     99                 tempResult = i + j;
    100                 System.out.print(tempResult + "	");
    101                 // 为了给下一次循环使用,调整一下i位置上 和 j位置上的值
    102                 j = i;
    103                 i = tempResult;
    104             }
    105         }
    106     }
    107     
    108     /**
    109      * 写法2、创建递归方法
    110      * @param n
    111      * @return
    112      */
    113     public static int FibonacciEx(int n) {
    114         // 声明最终结果
    115         int result = 0;
    116         
    117         if (n <= 2 && n > 0) {
    118             result = 1;
    119         } else {
    120             result = FibonacciEx(n - 1) + FibonacciEx(n - 2);
    121         }
    122         
    123         return result;
    124     }
    125 }
  • 相关阅读:
    基于微信小程序的票价和时间选择以及计算总价
    基于Echarts的股票K线图展示
    基于Echarts的中国地图数据展示
    微信公众号网页授权登录获取用户基本信息
    springboot+mybatis+maven角色权限框架
    java服务端微信小程序支付
    推理 —— 猜帽子颜色
    Java 容器的使用及数组、List、Set 的相互转换
    构建工具 —— Groovy 与 Gradle
    效率生产力工具 —— idea 插件
  • 原文地址:https://www.cnblogs.com/iflytek/p/6443911.html
Copyright © 2011-2022 走看看