题解 | 支付宝消费打折

支付宝消费打折

https://www.nowcoder.com/practice/f8997c9b82714f058e12433a32614993

#include <cstdio>
#include <iostream>
#include<algorithm>
#include<string>
using namespace std;

bool cmp(double a, double b) {
    return a < b;
}
int main() {
    int n, k;
    scanf("%d", &n);
    scanf("%d", &k);
    int a[n];  //价格正整数
    //string str;
    char str[n+1];
    double pay[n]; //实际应付为浮点数
    int cnt = 0;

   
    for (int i = 0; n - i > 0; i++) {//读取N个价格
        scanf("%d", &a[i]);
    }
    getchar(); //放错点,要将价格后的换行读取后再读字符
    for (int i = 0; n - i > 0; i++) {//读取是否支持优惠
        scanf("%c", &str[i]);
    }
    for (int i = 0; n - i > 0; i++) {
        if (str[i] == '0')pay[i] = a[i];
        else pay[i] = a[i] * 0.95;
    }
    sort(pay, pay + n, cmp);
    // for (int i = 0; i < n&&k>0; i++) { //循环错误,K>0代表有钱,但不一定买的起下一件物品
        
    //     k = k - pay[i];
    //     cnt+=1;
    // }

    double remain = k;
    for (int i = 0; n-i>0; i++) {
        if (remain>=pay[i]) {
        remain = remain-pay[i];//如果反过来将浮点数赋值给整数,则会发生截断(丢失小数部分),这时候通常需要显式强制转换,例如 int x = (int)3.14;(结果为 3)。
        cnt+=1;
        }
        else{
            break;
        }
    }
    printf("%d",cnt);
}


// 64 位输出请用 printf("%lld")

全部评论

相关推荐

Java面试先知:我也是和你一样的情况,hr 说等开奖就行了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务