題目描述
新年快到了,計算機學院新年晚會正在籌備中,今年有一個新創意:來參加晚會的所有學生都有禮物(一根棒棒糖)。老師把買棒棒糖的任務交給小明瞭,並指定了要買的棒棒糖的品牌和品種。俗話說得好,貨比三家不喫虧。小明來到了商店,看了各個店鋪裏這種棒棒糖的價格,不僅如此,他還記住了每個店鋪的存貨量。已知小明打算購買n根棒棒糖,問他最少要花多少錢?
輸入
第一行輸入一個整數n,表示要購買的棒棒糖數量;第二行是一個整數m(1<=m<=10),表示明明考察過的店鋪的數量;接下來m行,每行兩個數,表示該店鋪中棒棒糖的價格和數量,價格爲一實數(最多兩位小數),數量爲一整數。
輸出
輸出一個實數,保留兩位小數,表示最小費用。
樣例輸入
100
4
0.5 50
0.33 30
1 80
0.6 40
樣例輸出
46.90
tips:
1 先將所有的數據以價格從小到大排序
2 還要買的糖的數量>當前種類糖的數量 直接買,總數減去當前種類的糖的數量
3 還有買的糖的數量< 當前種類糖的數量 買需要的數量 總數減去
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct sugar
{
double price;
int count;
}SUGAR;
int main(){
int n;
int m,shengyu;
double ret=0;
SUGAR buf[10],temp;
scanf("%d%d",&n,&m);
for (int i = 0; i < m; i++)
{
scanf("%lf%d",&buf[i].price,&buf[i].count);
}
for (int i = 0; i < m; i++) //對價格排序
{
for (int j = i + 1; j < m; j++){
if (buf[j].price<buf[i].price)
{
temp = buf[j];
buf[j] = buf[i];
buf[i] = temp;
}
}
}
for (int i = 0; i < m; i++) //購買
{
// printf("%lf %d \n",buf[i].price,buf[i].count);
if (n-buf[i].count>=0)
{
ret += buf[i].price*buf[i].count;
n -= buf[i].count;
}
else if (n!=0)
{
ret += buf[i].price*n;
n -= n; //需要讓需要購買的糖果數量爲0
}
}
printf("%.2lf",ret);
}