ZZULIOJ 1187: 棒棒糖(結構體專題)

題目描述

新年快到了,計算機學院新年晚會正在籌備中,今年有一個新創意:來參加晚會的所有學生都有禮物(一根棒棒糖)。老師把買棒棒糖的任務交給小明瞭,並指定了要買的棒棒糖的品牌和品種。俗話說得好,貨比三家不喫虧。小明來到了商店,看了各個店鋪裏這種棒棒糖的價格,不僅如此,他還記住了每個店鋪的存貨量。已知小明打算購買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);

}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章