标题:一道简单的贪心题,有个问题求大佬帮忙看一下
只看楼主
青蝶
Rank: 2
等 级:论坛游民
帖 子:160
专家分:51
注 册:2018-2-4
结帖率:92%
已结贴  问题点数:5 回复次数:6 
一道简单的贪心题,有个问题求大佬帮忙看一下
题目链接:https://

问题:题目里说每种月饼数量和总价格都是整数,但是这道题定义成int有一个测试点过不去,定义成double就过了,求大佬帮忙看一看怎么回事?

有一个点过不去的代码:
程序代码:
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<string>
#include<sstream>
#include<cmath>
#include<algorithm>
#include<queue>
#include<vector>
#include<set> 
#include<map>
#include<functional>
#include<iomanip> 
#define LL long long
using namespace std;

int N,D;

struct node{
    int sum;//两个变量定义成int
    int price;
    double a;
}cake[1010];

bool cmp(node s1,node s2){
    return s1.a>s2.a;
}

int main(void){
    cin>>N>>D;
    int i;
    for(i=1;i<=N;i++) cin>>cake[i].sum;
    for(i=1;i<=N;i++) cin>>cake[i].price;
    for(i=1;i<=N;i++) cake[i].a=(double)cake[i].price/(double)cake[i].sum;//强制类型转换也加了
    sort(cake+1,cake+1+N,cmp);
    i=1;
    double money=0.0;
    while(D && i<=N){
        if(D>=cake[i].sum){
            D-=cake[i].sum;
            money+=cake[i].price;
        }
        else{
            money+=(double)D*cake[i].price/(double)cake[i].sum;
            D=0;
        }
        i++;
    }
    cout<<fixed<<setprecision(2)<<money<<endl;
    return 0;
}
    
                
    



能AC的代码:
程序代码:
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<string>
#include<sstream>
#include<cmath>
#include<algorithm>
#include<queue>
#include<vector>
#include<set> 
#include<map>
#include<functional>
#include<iomanip> 
#define LL long long
using namespace std;

int N,D;

struct node{
    double sum;  //两个变量改成double
    double price;
    double a;
}cake[1010];

bool cmp(node s1,node s2){
    return s1.a>s2.a;
}

int main(void){
    cin>>N>>D;
    int i;
    for(i=1;i<=N;i++) cin>>cake[i].sum;
    for(i=1;i<=N;i++) cin>>cake[i].price;
    for(i=1;i<=N;i++) cake[i].a=cake[i].price/cake[i].sum;
    sort(cake+1,cake+1+N,cmp);
    i=1;
    double money=0.0;
    while(D && i<=N){
        if(D>=cake[i].sum){
            D-=cake[i].sum;
            money+=cake[i].price;
        }
        else{
            money+=(double)D*cake[i].price/cake[i].sum;
            D=0;
        }
        i++;
    }
    cout<<fixed<<setprecision(2)<<money<<endl;
    return 0;
}
    
                
    
    

               
   
   


搜索更多相关主题的帖子: int double include sum price 
2019-03-09 13:10
waterstar
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:984
专家分:2810
注 册:2010-2-12
得分:3 
题目上说库存和售价都是正数,你用整数当然没法通过了。

冰冻三尺,非一日之寒;士别三日,不足刮目相看!
2019-03-09 16:50
青蝶
Rank: 2
等 级:论坛游民
帖 子:160
专家分:51
注 册:2018-2-4
得分:0 
回复 2楼 waterstar
???整数不包含正数么?
2019-03-09 18:30
zzz
Rank: 1
等 级:新手上路
帖 子:44
专家分:8
注 册:2019-1-12
得分:0 
用长整型试试
2019-03-09 18:33
青蝶
Rank: 2
等 级:论坛游民
帖 子:160
专家分:51
注 册:2018-2-4
得分:0 
回复 4楼 zzz
题目里有说数据范围,不会爆int,改成长整型也不行。
2019-03-10 12:17
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:3 
输入格式:
每个输入包含一个测试用例。每个测试用例先给出一个不超过 1000 的正整数 N 表示月饼的种类数、以及不超过 500(以万吨为单位)的正整数 D 表示市场最大需求量。随后一行给出 N 个正数表示每种月饼的库存量(以万吨为单位);最后一行给出 N 个正数表示每种月饼的总售价(以亿元为单位)。数字间以空格分隔。

题目说的的是“正数”,不是“正整数”
经过测试,在其测试用例中,库存量 和 总售价 确实会出现浮点数。
2019-03-11 09:31
青蝶
Rank: 2
等 级:论坛游民
帖 子:160
专家分:51
注 册:2018-2-4
得分:0 
回复 6楼 rjsp
明白了,谢谢大佬。
2019-03-13 18:57



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-493481-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.685911 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved