• 书店售书最低价格问题


    书店针对《哈利波特》系列书籍进行促销活动,一共5卷,用编号0、1、2、3、4表示,单独一卷售价8元, 具体折扣如下所示:

                                   本数                  折扣

                                   2                       5%

                                   3                       10%

                                   4                       20%

                                   5                       25%

    根据购买的卷数以及本数,会对应不同折扣规则情况。单数一本书只会对应一个折扣规则,
    例如购买了两本卷1,一本卷2,则可以享受5%的折扣,另外一本卷一则不享受优惠。
    设计算法能够计算出读者购买一批书的最低价格。
     
    1》设计思路:
    首先在自己计算一下1到10本的最低价格:
    其中1到5本的时候,都是按相应的折扣进行购买,就是最低价格
    而6到10本就需要自己算一下了,其结果如下:
    6本:5+1方案价格最低
    7本:5+2方案价格最低
    8本:4+4方案价格最低
    9本:5+4方案价格最低
    10本:5+5方案价格最低
     
    所以10本以后就需要看除以5的余数就可以了,可以整除的那部分按5本折扣算,不能整除的按不能整除的有几本,就按几本折扣算,
    其中当余数为3时,情况较为特殊,因为当有8本是4+4方案最优,应该是减去8本,那8本按4+4计算,其余的按5本的折扣计算
    当然只有3本时,就输出3本书的情况。
     
    2》源代码:
     1 import java.util.*;
     2 public class MinPrice {
     3     public  static void main(String args[]){
     4         Scanner sc =new Scanner(System.in);
     5         
     6         double money=0;//总钱数
     7         int biaoshi =1; //是否想继续的标识
     8         while(biaoshi>0)
     9         {
    10             System.out.println("请输入你想购书的数量:");
    11             int num = sc.nextInt();
    12             
    13             int yushu=num%5;
    14             switch(yushu)
    15             {
    16                 case 0:
    17                 {
    18                     money=num*8*0.75;
    19                     break;
    20                 }
    21                 case 1:
    22                 {
    23                     money=(num-1)*8*0.75;
    24                     break;
    25                 }
    26                 case 2:
    27                 {
    28                     money=(num-2)*8*0.75+8*2*0.95;
    29                     break;
    30                 }
    31                 case 3:
    32                 {
    33                     if(num==3)
    34                     {
    35                         money=num*8*0.9;
    36                         break;
    37                     }
    38                     else
    39                     {
    40                         money=(num-8)*8*0.75+2*8*4*0.85;
    41                         break;
    42                     }
    43                     
    44                 }
    45                 case 4:
    46                 {
    47                      money=(num-4)*8*0.75+8*4*0.8;
    48                      break;
    49                 }
    50             }
    51             System.out.println("书的最低价格为:"+money);
    52             System.out.println("您是否继续,继续选1否则选0");
    53             biaoshi =sc.nextInt();
    54         }
    55         
    56     }
    57 }

    结果截图:

    总结:要注意总结规律,还要注意找出不同于常规的那个数,这往往是正确解决问题关键

  • 相关阅读:
    转:.net面试题及答案(一)
    高兴!
    游标中LOCAL的意思
    九度 1333
    在进程槽中为进程分配一个空闲位置并分配一个进程号
    USACO Section 1.2 Milking Cows
    九度 1334
    USACO Section 1.3 Mixing Milk
    USACO Section 1.3 Calf Flac
    USACO Section 1.3 Prime Cryptarithm
  • 原文地址:https://www.cnblogs.com/sz20142898/p/5543038.html
Copyright © 2020-2023  润新知