codeup 1023: 坑爹的黑店

2 篇文章 0 订阅
1 篇文章 0 订阅

题目描述

今天小明去了一个风景如画的地方散心,但是自己带的饮料喝完了,小明口渴难耐,见不远处有家小商店,于是跑去买饮料。

小明:“我要买饮料!”

店主:“我们这里有三种饮料,矿泉水1.5元一瓶,可乐2元一瓶,橙汁3.5元一瓶。”

小明:“好的,给我一瓶矿泉水。”

说完他掏出一张N元的大钞递给店主。

店主:“我忘了提醒你了,我们这里没有找客人钱的习惯的,多的钱我们都当小费收了的,嘿嘿。”

小明:“......”

小明环顾四周,就这一家商店,况且实在太渴了,就决定在这买了。不过小明想,与其把钱当小费送给他还不如自己多买一点饮料,反正早晚都要喝,但是要尽量少让他赚小费。

现在小明希望你能帮他计算一下,最少他要给店主多少小费。

输入

输入数据的第一行是一个整数T(1<=T<=100),代表测试数据的数量。然后是T行测试数据,每个测试数据只包含一个正整数N(1<=N<=10000),N代表小明手中钞票的面值,以分为单位。
注意:商店里只有题中描述的三种饮料。

输出

对于每组测试数据,请你输出小明最少要浪费多少钱给店主作为小费,以分为单位。

样例输入 Copy

2
900
250

样例输出 Copy

0
50

 

 

思路分析: 一共有 1.5 2 3.5元的 

思路一:

总花费w = 1.5*i + 2*j + 3.5*k 暴力遍历即可得到最小值

#include<cstdio>
#include<cmath>
#include<algorithm>
#include<vector>
#include<cstring>

using namespace std;

int counts(int total){
    int a = 150, b = 250 ,c = 350;
    int result;
    int min = total;
    for(int i=0;i<=total/150;i++){
        for(int j=0;j<=(total-i*150)/200;j++){
            for(int k=0;k<=(total-i*150-j*200)/350;k++){
                result = 150*i + 200*j + 350*k;
                if(min>total - result) min = total - result;
            }
        }
    }
    return min;

}

int main(){
    int n;
    int total;

    scanf("%d",&n);
    for(int i=0;i<n;i++){
        scanf("%d",&total);
        printf("%d\n",counts(total));
    }
}

 

思路二: 我们可以仔细看它的取值,1.5 , 2 , 3.5  用 1.5 / 2 /3.5 的不同组合组合出  4  5  5.5  6  6.5  7  7.5 .  . .

由此我们可以得到结论 对于任何面值大于3.5元的钞票 换算成以分为单位是 任意大于350分面值的钞票

其小费都可以用 N%50 来求取

对于小于350的 若大于200 则 N%200

大于150 小于 200 则 N%150

小于150的就 直接全是小费了

这部分代码其实很简单了 读者可以自己理解后实现即可

 

  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值