• 课堂练习之买书打折最便宜


    一、设计思路

      当买书的数量超过五本的时候,想让价钱最便宜,就必须尽可能的让书可以凑成一套书,也就是可以连续成套,这样就能保证能够更多的享受打折的优惠,所以:

    当买6本书时,选择的购买方式是:五本一套,另加一单本,5+1;

    当买7本书时,选择的购买方式是:5+2;

    当买8本书时,选择的购买方式是:4+4;

    当买9本书时,选择的购买方式是:5+4;

    当超过10本书,就可以借助上面的方法,以此类推。

    二、程序代码

     1 import java.util.*;
     2 class Bargain 
     3 {
     4     public static void main(String[] args) 
     5     {
     6         double sum = 0;   
     7         System.out.println("请输入您要购买的本数:");
     8         Scanner sc = new Scanner(System.in);
     9         int num = sc.nextInt();
    10 
    11         if(num<=5)//购买书的本数不超过五本
    12         {
    13            switch(num)
    14            {
    15            case 1:
    16                sum=8;//不打折
    17            break;
    18            case 2:
    19                sum=2*8*0.95;//95折
    20            break;
    21            case 3:
    22                sum=3*8*0.9;//9折
    23            break;
    24            case 4:
    25                sum=4*8*0.8;  //8折
    26            break;
    27            case 5:
    28                sum=5*8*0.75;  //75折
    29            break;
    30            }
    31         }
    32         if(num>5&&num<=9)
    33         {
    34             sum=method(num);      
    35         }
    36         if(num>=10)      //买的书本数超过10本      
    37         {
    38             switch(num%5)
    39            {
    40                 case 0:
    41                     sum=(num/5)*8*5*0.75;
    42                 break;
    43                 case 1:
    44                     sum=(num/5-1)*8*5*0.75+method(6);
    45                 break;
    46                 case 2:
    47                     sum=(num/5-1)*8*5*0.75+method(7);
    48                 break;
    49                 case 3:
    50                     sum=(num/5-1)*8*5*0.75+method(8);
    51                 break;
    52                 case 4:
    53                     sum=(num/5-1)*8*5*0.75+method(9);
    54                 break;
    55            }
    56         }
    57 
    58         System.out.println("最便宜的价钱为:"+sum+"元");
    59     }
    60 
    61 
    62     public static double method(int a)//买书的本数为6、7、8、9
    63     {   
    64         double min = 0;
    65         int temp = a%5;
    66         switch(temp)
    67         {
    68             case 1:
    69                 min=5*8*0.75+8;
    70             break;
    71             case 2:
    72                 min=5*8*0.75+2*8*0.95;
    73             break;
    74             case 3:
    75                 min=4*8*0.8+4*8*0.8;
    76             break;
    77             case 4:
    78                 min=5*8*0.75+4*8*0.8;
    79             break;   
    80         }
    81         return min;   
    82     }
    83 }

    三、结果截图

    四、新特体会

      在想这个思路的时候,一开始把这个想的很复杂,以为需要考虑确定本书后,还要确定买书的种类,但是试验了几个后,发现完全没有必要这样考虑,可以直接考虑尽可能的让买的书能凑成一套书,这样自然的就可以得到最低的价钱,但是当模5取余为8的情况下,是比较特殊的,最后两种还是要分成4+4,这样就没什么问题了

  • 相关阅读:
    BaseServlet的编写
    两个线程交替打印1-100
    java集合中的HashMap源码分析
    mybatis一级缓存与二级缓存的原理
    mybatis的执行流程
    spring IOC的理解
    一文彻底搞懂面试中常问的各种“锁”
    Dubbo相关的基础
    Servlet基础
    文件传输基础
  • 原文地址:https://www.cnblogs.com/KevinBin/p/4428875.html
Copyright © 2020-2023  润新知