PAT Grade A 1070 Mooncake (25 points) | Implémentation C ++

1. Description du titre

Lien du titre original
Insérez la description de l'image ici

Spécification d'entrée:

Insérez la description de l'image ici

Spécification de sortie:

Insérez la description de l'image ici

Exemple d'entrée:

3 200
180 150 100
7,5 7,2 4,5

Exemple de sortie:

9,45

Deux idées de résolution de problèmes

Pensée gourmande, pour en tirer le meilleur parti, nous vendrons toujours le gâteau de lune avec le prix unitaire le plus élevé, puis nous achèterons le gâteau de lune avec le deuxième prix le plus élevé après la vente, et ainsi de suite. Nous pouvons utiliser une structure pour représenter le gâteau de lune, qui contient le prix unitaire, le prix total et la quantité. Le prix unitaire peut être obtenu en divisant le prix total par la quantité. Le tableau de structure est trié par prix unitaire de grand à petit, puis parcouru dans l'ordre. La quantité atteint le titre. Lorsque vous donnez un nombre, quittez la boucle et affichez la réponse.

Trois, code AC

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn = 1010;
struct Mooncake
{
    
    
  double single, price;
	double num;
}mooncake[maxn];
bool cmp(Mooncake a, Mooncake b)
{
    
    return a.single > b.single;}
int main()
{
    
    
  int N, D, cnt = 0;
  double profit = 0;
  scanf("%d%d", &N, &D);
  for(int i=0; i<N; i++)
    scanf("%lf", &mooncake[i].num);
  for(int i=0; i<N; i++)
  {
    
    
    scanf("%lf", &mooncake[i].price);
    mooncake[i].single = mooncake[i].price/mooncake[i].num;
  }
  sort(mooncake, mooncake+N, cmp);
  int now = 0;
  while(cnt < D && now < N)
  {
    
    
    if(mooncake[now].num + cnt <= D)
    {
    
    
      cnt += mooncake[now].num;
      profit += mooncake[now].price;
    }
    else
    {
    
    
      profit += mooncake[now].single * (D-cnt);
      cnt = D;
    }
    now++;
  }
  printf("%0.2f", profit);
  return 0;
}

Je suppose que tu aimes

Origine blog.csdn.net/weixin_42393947/article/details/108707623
conseillé
Classement