1.21 贪心入门上午PAT例题题解

1.B1023

#include<cstdio>

int a[10];

int main()
{
	for(int i=0;i<=9;i++)
	{
		scanf("%d",&a[i]);
	}
	for(int i=1;i<=9;i++)
	{
		if(a[i])
		{
			printf("%d",i);
			a[i]--;
			break;
		}
	}
	for(int i=0;i<=9;i++)
	{
		while(a[i]--)
		{
			printf("%d",i);
		}
	}
}

2.B1020

#include<cstdio>
#include<algorithm>
using namespace std;
const int maxv=1011;

struct node
{
	double price,sum,rate;
}cake[maxv];

bool cmp(node a,node b)
{
	return a.rate>b.rate;
}

int n;
double d;

int main()
{
	scanf("%d %lf",&n,&d);
	for(int i=1;i<=n;i++)
	{
		scanf("%lf",&cake[i].sum);
	}
	for(int i=1;i<=n;i++)
	{
		scanf("%lf",&cake[i].price);
		cake[i].rate=cake[i].price/cake[i].sum;
	}
	sort(cake+1,cake+1+n,cmp);
	int cnt=1;
	double ans=0;
	while(d>0&&cnt<=n)
	{
		if(d<=cake[cnt].sum)
		{
			ans+=(d*cake[cnt].rate);
			d=0;
		}
		else
		{
			ans+=cake[cnt].price;
			d-=cake[cnt].sum;
		}
		cnt++;
	}
	printf("%.2lf
",ans);
	return 0;
}

 

3.A1037

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

const int maxv=1e5+5;

int n,m;
int a[maxv],b[maxv];

int main()
{
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
		scanf("%d",&a[i]);
	scanf("%d",&m);
	for(int i=1;i<=m;i++)
		scanf("%d",&b[i]);
	sort(a+1,a+1+n);
	sort(b+1,b+1+m);
	int ans=0;
	int p=1;
	while(p<=n&&a[p]<0&&b[p]<0)
	{
		ans+=a[p]*b[p];
		p++;
	}
	int p1=n;
	int p2=m;
	while(p1>=1&&p2>=1&&a[p1]>0&&b[p2]>0)
	{
		ans+=a[p1]*b[p2];
		p1--;
		p2--;
	}
	printf("%d
",ans);
}

4.A1038

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

const int maxv=1e4+4;
string s[maxv];
bool cmp(string a,string b)
{
	return a+b<b+a;
}

int main()
{
	int n;
	cin>>n;
	for(int i=1;i<=n;i++)
		cin>>s[i];
	sort(s+1,s+1+n,cmp);
	string ans="";
	for(int i=1;i<=n;i++)
		ans+=s[i];
	while(ans.length()>0&&ans[0]=='0')
		ans.erase(ans.begin());
	if(ans.length()==0)
		cout<<0<<endl;
	else
		cout<<ans<<endl;
	return 0;
}

  

原文地址:https://www.cnblogs.com/fishdog/p/10297638.html