UVALive 7503 Change(乱搞)题解

题意:你现在有面额为A的纸币,现在需要面额为B的钱(可以是一张也可以是好多张拼成一张),有一台自动售货机,里面有任意价格的商品,售货机兑换出的零钱是随机的(比如找你0.03可能给你0.01+0.01+0.01也可能是0.01+0.02),那么问至少要花多少钱你肯定能兑换到所需要的面额。A, B ∈ {0.01, 0.02, 0.05, 0.1, 0.2, 0.5, 1, 2, 5, 10, 20, 50, 100} and A > B

思路:题意读错了...这里的意思不是你只能买一个东西,而是你买了之后可以用找零的钱继续买,那么如果0.01可以解决那么就是0.01,其他的只要用零钱继续0.01就可以了。

代码:

#include<set>
#include<map>
#include<cmath>
#include<queue>
#include<string>
#include<cstdio>
#include<cstring>
#include<sstream>
#include<algorithm>
typedef long long ll;
using namespace std;
const int maxn = 1000 + 10;
const int MOD = 1e9 + 7;
const int INF = 0x3f3f3f3f;
int main(){
    int t, ca = 1;
    scanf("%d", &t);
    while(t--){
        double a, b;
        scanf("%lf%lf", &a, &b);
        printf("Case #%d: ", ca++);
        if(b == 0.01){  //0.03
            if(a == 0.02){
                printf("0.01\n");
            }
            else if(a == 0.05){
                printf("0.02\n");
            }
            else{
                printf("0.02\n");
            }
        }
        else if(b == 0.02){ //0.04 0.09
            if(a == 0.05){
                printf("0.01\n");
            }
            else{
                printf("0.01\n");
            }
        }
        else if(b == 0.05){ //0.09
            printf("0.01\n");
        }
        else if(b == 0.1){  //0.39
            if(a == 0.2) printf("0.01\n");
            else if(a == 0.5) printf("0.02\n");
            else printf("0.02\n");
        }
        else if(b == 0.2){  //0.49 0.99
            if(a == 0.5) printf("0.01\n");
            else printf("0.01\n");
        }
        else if(b == 0.5){  //0.99
            printf("0.01\n");
        }
        else if(b == 1){    //3.99
            if(a == 2) printf("0.01\n");
            else if(a == 5) printf("0.02\n");
            else printf("0.02\n");
        }
        else if(b == 2){    //4.99 9.99
            if(a == 5) printf("0.01\n");
            else printf("0.01\n");
        }
        else if(b == 5){    //9.99
            printf("0.01\n");
        }
        else if(b == 10){   //39.99
            if(a == 20) printf("0.01\n");
            else printf("0.02\n");
        }
        else if(b == 20){   //49.99 99.99
            if(a == 50) printf("0.01\n");
            else printf("0.01\n");
        }
        else{   //99.99
            printf("0.01\n");
        }
    }
    return 0;
}

 

转载于:https://www.cnblogs.com/KirinSB/p/10328002.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值