请大佬帮蒟蒻看看这两段代码有什么不同
查看原帖
请大佬帮蒟蒻看看这两段代码有什么不同
300772
James213楼主2021/4/17 10:14

RT
第一段是自己写的,第二段是根据题解改的,但第一段第2 4 两个点WA了
自己的:

#include <bits/stdc++.h>
using namespace std;
struct gold
{
	int value;
	int wei;
	double pri;
}g[103];
bool cmp(const gold& a,const gold& b)
{
	return a.pri>b.pri;
}
int n,w;
double ans;
int main()
{
	cin >> n >> w;
	for(register int i=1;i<=n;++i)
	{
		cin >> g[i].wei >> g[i].value;
		g[i].pri=double(g[i].value)/double(g[i].wei);
	}
	sort(g+1,g+n+1,cmp);
	for(register int i=1;i<=n;++i)
	{
		if(w>=g[i].wei)
		{
		    w-=g[i].wei;
			ans+=g[i].value*1.0;
		}
		if(w<g[i].wei)
		{
			ans+=w*g[i].pri*1.0;
			break;
		}
	}
	printf("%.2lf",ans);
	return 0;
}

改了之后的:

#include <bits/stdc++.h>
using namespace std;
struct gold
{
	double value;
	double wei;
	double pri;
}g[103];
bool cmp(gold a,gold b)
{
	return a.pri>b.pri;
}
int n;
double w;
double ans;
signed main()
{
	cin >> n >> w;
	for(register int i=1;i<=n;++i)
	{
		cin >> g[i].wei >> g[i].value;
		g[i].pri=g[i].value/g[i].wei;
	}
	sort(g+1,g+n+1,cmp);
	for(register int i=1;i<=n;++i)
	{
		if(w>=g[i].wei)
		{
		    w-=g[i].wei;
			ans+=g[i].value;
		}
		else
		{
			ans+=w*g[i].pri;
			break;
		}
	}
	printf("%.2f",ans);
	return 0;
}

试了好多次,问题好像出在最后一个循环的else上,有巨佬能解释一下为什么吗?

2021/4/17 10:14
加载中...