11308: Bankrupt Baker ★★☆☆☆ 題組:Problem Set Archive with Online Judge

Slides:



Advertisements
Similar presentations
1 第 3 章 C++ 中的条件与循环 第 3 次见面! acm.nefu.edu.cn/C++_03.ppt.
Advertisements

海伦深深地感激自己的老师, 她说:假如给我三天光明,我 首先要长久地凝视我的老师 — — 安妮 · 莎莉文 !
11010: Tic-Tac-Tough ★★★★☆ 題組: Problem Set Archive with Online Judge
Introduction 基本概念 授課老師:蕭志明
詞彙—物品01 下擺 千斤頂 叉子 口紅 口袋 口罩 大哥大 小椅子 工具 下跤裾 衫仔裾 千斤秤 攕仔 胭脂 橐袋仔 褲袋仔 喙掩 手機仔
程序设计实习 3月份练习解答
用“自言自语法”提高学生 英语口头表达能力 李奉栖.
自 然 探 索 圓周美語 My name is.
第一章 C语言概述 计算机公共教学部.
年度校樹選拔秀 主辦單位:楊梅國小.
第五章 资料收集.
補充: Input from a text file
----银行间的比较 论资本构成与充足率 淡 彩 的 黑 板 淡 彩 的 黑 板 金融73班 王艺霏 王 英
第九章 排序 插入排序 交换排序 选择排序 归并排序 基数排序.
程設一.
第一章 程序设计入门.
C++程序设计 第二讲 清华大学软件学院.
C++语言程序设计 C++语言程序设计 第四章 数组及自定义数据类型 C++语言程序设计.
计算概论 第十八讲 C语言高级编程 结构与习题课 北京大学信息学院.
授课老师:龚涛 信息科学与技术学院 2018年3月 教材: 《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
Object-Oriented Programming in C++ 第一章 C++的初步知识
程序设计期末复习 黎金宁
第三章 C++中的C 面向对象程序设计(C++).
2 C++ 的基本語法和使用環境 親自撰寫和執行程式是學好程式語言的不二法門。本章藉由兩個簡單的程式,介紹C++ 程式的基本結構和開發環境,讓初學者能逐漸建立使用C++ 的信心。
程式撰寫流程.
第5章 堆疊(Stacks) 5-1 堆疊的基礎 5-2 堆疊的表示法 5-3 堆疊的應用 - 運算式的計算與轉換
C#面向对象程序设计 $7 继承和多态性.
Chap 3 分支结构 3.1 简单的猜数游戏 3.2 四则运算 3.3 查询自动售货机中商品的价格.
第3讲 C++程序控制结构 3.1 顺序结构 3.2 分支结构 3.3 循环结构 3.4 转向控制 3.5 综合案例分析.
C++语言程序设计 第二章 C++简单程序设计.
程序的三种基本结构 if条件分支语句 switch多路开关语句 循环语句 循环嵌套 break,continue和goto语句
切換Dev c++顯示語言 工具->環境選項(V)->介面->language (Chinese TW)
ADFGVX 张天豪 陆纪圆.
东北林业大学 陈宇 ACM程序设计 东北林业大学 陈宇
第1章 概述 本章要点: C语言程序结构和特点 C语言程序的基本符号与关键字 C语言程序的编辑及运行 学习方法建议:
C++ 程式設計 基礎篇 張啟中 Chang Chi-Chung.
Sorting in Linear Time Michael Tsai 2013/5/21.
10066: The Twin Towers ★★★☆☆ 題組:Problem Set Archive with Online Judge
潘爱民 C++ Overview 潘爱民
10465: Homer Simpson ★★★☆☆ 題組:Problem Set Archive with Online Judge
第九章 排序 概述 插入排序 快速排序 交换排序(起泡排序) 选择排序 归并排序.
C++语言程序设计 C++语言程序设计 第三章 控制语句 第十一组 C++语言程序设计.
今天, AC 你 了吗? 2019/4/26.
保留字與識別字.
第3 语言翻译问题 [学习目标]:学习和掌握语言的语法的基本概念和基本要素,理解翻译的步骤;学习和掌握BNF文法。
10902: Pick-up Sticks ★★☆☆☆ 題組:Problem Set Archive with Online Judge
<编程达人入门课程> 本节内容 为什么要使用变量? 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ:
C++语言程序设计 C++语言程序设计 第十章 多态 第十一组 C++语言程序设计.
資料結構簡介 綠園.
第三章 世界文明的蛻變與互動 第一節 歐洲社會的蛻變 第二節 世界文明的交匯 第三節 亞洲大帝國的發展 1.
選一選 請將正確的解答點選出來.
第 8 章 标准模板库STL 陈哲 副教授 南京航空航天大学 计算机科学与技术学院.
第 3 章 类的基础部分 陈哲 副教授 南京航空航天大学 计算机科学与技术学院.
#include <iostream.h>
恩典夠用.
1753: Need for Speed ★★☆☆☆ 題組:Problem Set Archive with Online Judge
1730: Sum of MSLCM ★★☆☆☆ 題組:Problem Set Archive with Online Judge
11908: Skyscraper ★★★☆☆ 題組:Problem Set Archive with Online Judge
第五章 序列埠通訊 並列與序列通訊簡介 認識序列埠 認識字元資料類型 字串資料類型 從序列埠監控視窗觀察變數 從Arduino接收序列資料
《数据结构与算法设计》第一部分 面向对象的C++程序设计基础.
The role of Algorithms in Computing
10039: Railroads ★★☆☆☆ 題組:Problem Set Archive with Online Judge
11455: Behold My Quadrangle ★☆☆☆☆
10393:The One-Handed Typist
10107: What is the Median? ★★☆☆☆
變數與資料型態  綠園.
12439: February 29 ★☆☆☆☆ 題組:Problem Set Archive with Online Judge
11506: Angry Programmer ★★★★☆ 題組:Contest Set Archive with Online Judge
10801: Lift Hopping ★★★☆☆ 題組:Problem Set Archive with Online Judge
1200: A DP problem ★★☆☆☆ 題組:Problem Set Archive with Online Judge
Presentation transcript:

11308: Bankrupt Baker ★★☆☆☆ 題組:Problem Set Archive with Online Judge 解題者:陳子傑 解題日期:2017年3月30日 題意:有一個烘焙師要做蛋糕,因此有做蛋糕的食譜(1 ≦ t ≦100),食譜有蛋糕名稱,材料數量(m),蛋糕部位數量(n),預算金額(b)(1 ≦ m; n ≦ 100, 1 ≦ b ≦ 106),材料名稱,材料單價(0 ≦ c ≦ 5000),以及蛋糕各部位名稱,各部位所需的材料名稱及數量(1 ≦ k ≦ 100),現在我們要寫一程式把以上資料依序輸入並評估做這個蛋糕有多少部位是在預算內或者是成本太高,顯示太貴(Too expensive!)。

題意範例: Sample Input: gold 4500 2 Scrumptious Caramel Topping diamond 5000 Display Cake - Do Not Eat! 3 costlyflour 100 gold 100 diamond 100 2 My Favourite Cheesecake 8 3 100 sugar 4 water 0 lemonjuice 3 creamcheese 20 vanilla 5 egg 5 cream 10 strawberry 5 Strawberry Whipped Cream cream 5 strawberry 3 Scrumptious Caramel Topping 3 sugar 6 water 3 lemonjuice 1 Secret Cheesecake Base 5 creamcheese 3 sugar 5 vanilla 1 egg 6 cream 1 Million Dollar Cakes 3 1 999999 costlyflour 500

/*1. 蛋糕名稱要轉大寫 2. 蛋糕部位名稱要依成本低到高依序印出 3. 蛋糕部位名稱要依字母順序依序印出 4. 每個蛋糕之間要空行*/ 題意範例: Sample Output: MY FAVOURITE CHEESECAKE Scrumptious Caramel Topping Strawberry Whipped Cream MILLION DOLLAR CAKES Too expensive! /*1. 蛋糕名稱要轉大寫 2. 蛋糕部位名稱要依成本低到高依序印出 3. 蛋糕部位名稱要依字母順序依序印出 4. 每個蛋糕之間要空行*/

解法: 先輸入所需評估蛋糕數量,並產生一個迴圈 每個迴圈中需要一個map做材料單價表,以利搜尋和累加成本,以及一個自定義的結構(struct)Recipe陣列 這個Recipe結構儲存每個蛋糕部位的名稱和成本以及重載(Overloading)” < “ 之所以要重載” < ”是因為題目有要求蛋糕部位名稱要依成本低到高依序印出,所以Recipe陣列收集完後要做排序,這裡採用#include <algorithm>的sort()函式,由於要排序結構,所以當然就要重載囉 建構材料單價表需要一個迴圈 收集蛋糕各部位的資料需要兩個迴圈,一個是蛋糕部位的迴圈,另一個是個蛋糕部位中的成本累加的迴圈 排序完後,依照先前說的規則印出,若每個蛋糕中第一個蛋糕部位就超過成本,直接印出” Too expensive!”,後面不用印,若無則印到成本超過預算的部位結束(超過者不印) 最後記得還要再印一個空行喔

struct Recipe{ //蛋糕部位名稱與成本 解法範例: struct Recipe{ //蛋糕部位名稱與成本 string name; int cost; bool operator <(const Recipe& t) const{ if(cost!=t.cost) return cost<t.cost; else return name<t.name; } }; //用map收集材料和價格 map<string, int> ingredient;//材料價格表 for(int j=0; j<m; j++){ cin>>tmp>>c; getchar(); ingredient[tmp]=c;

for(int j=0; j<n; j++){ //蛋糕每一部位所需的材料數量 getline(cin, tmp); cin>>k; getchar(); recipe[j].name=tmp; recipe[j].cost=0; for(int l=0; l<k; l++){ //計算每一蛋糕部位的成本 int x; cin>>tmp>>x; iter=ingredient.find(tmp); //從材料表去找單價計算成本 if(iter!=ingredient.end()) recipe[j].cost=recipe[j].cost+iter->second*x; else cout<<"The ingredient doesn't exist!"<<endl; }

//蛋糕名稱 cout<<title<<endl; //蛋糕部位 //先排序因為成本要由低印到高 sort(recipe, recipe+n);//sort(陣列排序開頭,陣列排序尾巴) int first=0; for(int j=0; j<n; j++){ if(recipe[j].cost>b&&first==0){ cout<<"Too expensive!"<<endl; break; } if(recipe[j].cost<=b){ cout<<recipe[j].name<<endl; first=1; cout<<endl;//題目要求每個binder都要一個空行

討論 關於struct的重載為何是用小於而不是大於呢? 這是因為在std::sort的巨集(一系列預定義的規則取代一定的文字模式)中之定義是如此: struct _Iter_less_iter { template<typename _Iterator1, typename _Iterator2> bool operator()(_Iterator1 __it1, _Iterator2 __it2) const{ return *__it1 < *__it2; } }; 關於字母順序的排序是用string重載的”<”來達成,以ASCII的數字大小為原則,若字首一樣則以長度來比較