fruit(合并果子题解)-by Function
- 格式:pptx
- 大小:78.49 KB
- 文档页数:17
题目:水果类与虚函数多态与虚函数例题1.题目内容与要求①首先设计一个水果类(Fruit)作为基类,成员函数为显示“水果”函数;②然后设计Fruit类的四个派生类:香蕉类(Banana)、苹果类(Apple)、梨子类(Pear)和桃子类(Peach),成员函数分别为显示“香蕉”、“苹果”、“梨子”和“桃子”函数;③最后在主函数中定义这些类的对象,并调用它们的显示函数。
2.类的分析主函数水果类对象 香蕉类对象 苹果类对象 梨子类对象 桃子类对象 显示函数调用水果类显示函数香蕉类显示函数苹果类显示函数梨子类显示函数桃子类显示函数3.类的设计mainFruit f; Banana b; Apple a; Pear p; Peach ph; f=b; f.print(); f=a; f.print(); ……FruitprintBananaprintAppleprintPearprintPeachprint4.基类程序代码// 基类: 水果类class Fruit{public:void print() {cout<< "水果" <<endl; }};// 派生类1: 香蕉类class Banana: public Fruit{ public:void print() {cout<< "香蕉" <<endl;} };// 派生类2: 苹果类class Apple: public Fruit{ public:void print() {cout<< "苹果" <<endl;} };派生类程序代码// 派生类3: 梨子类class Pear: public Fruit{ public:void print() { cout<< "梨子" <<endl;} };// 派生类4: 桃子类class Peach: public Fruit{ public:void print() { cout<< "桃子" <<endl;} };#include <iostream> using namespace std; <5个类的定义在此!>int main() // 主函数 {核心代码在此!return 0; }主函数程序代码Fruit * pFruit[] = { new Fruit(),new Banana(), new Apple(), new Pear(), new Peach() };for(int i = 0; i < 5; i++) { (*pFruit[i]).print(); }❝从以上5行运行结果来看,似乎调用的都是基类的print 函数。
关于苹果的c++题以下是一个关于苹果的 C++ 题目:假设有一个果园,里面种了不同种类的苹果。
现在需要编写一个程序来计算果园里不同种类苹果的数量和总数量。
要求使用 C++ 编程语言,使用面向对象的编程方法。
以下是一个可能的解决方案:```cpp#include <iostream>using namespace std;class Apple {public:// 构造函数,初始化苹果的名称和数量Apple(string name, int quantity) {this->name = name;this->quantity = quantity;}// 获取苹果的名称string getName() {return this->name;}// 获取苹果的数量int getQuantity() {return this->quantity;}// 增加苹果的数量void incrementQuantity(int increment) { this->quantity += increment;}private:// 苹果的名称string name;// 苹果的数量int quantity;};int main() {// 创建不同种类的苹果对象,并初始化它们的名称和数量 Apple apple1(" Granny Smith", 10);Apple apple2(" Fuji", 20);Apple apple3(" Gala", 30);// 打印果园里不同种类苹果的名称和数量cout << "Granny Smith: " << apple1.getName() << ", " << apple1.getQuantity() << endl;cout << "Fuji: " << apple2.getName() << ", " << apple2.getQuantity() << endl;cout << "Gala: " << apple3.getName() << ", " << apple3.getQuantity() << endl;// 增加 Gala 苹果的数量apple3.incrementQuantity(10);// 打印果园里不同种类苹果的名称和数量,注意 Gala 苹果的数量已经增加cout << "Granny Smith: " << apple1.getName() << ", " << apple1.getQuantity() << endl;cout << "Fuji: " << apple2.getName() << ", " << apple2.getQuantity() << endl;cout << "Gala: " << apple3.getName() << ", " << apple3.getQuantity() << endl;// 计算果园里总的苹果数量int totalQuantity = apple1.getQuantity() +apple2.getQuantity() + apple3.getQuantity();cout << "Total quantity: " << totalQuantity << endl;return 0;}```这个程序定义了一个苹果类`Apple`,每个苹果对象都有名称和数量。
全国计算机等级考试二级Python真题及解析(8)图文程序填空阅读填空程序试题一、程序填空1.完善程序实现以下功能并保存。
输出数组的最大值。
arr1 =[12, 435, 76, 24, 78, 54, 866, 43]________ = -32768for i in range(0,7):if arr1[i] > max1 : max1 = ________print("最大值是:", ________)input("运行完毕,请按回车键退出...")2.阅读程序。
分析有关多项式的代码并回答问题。
求1!+2!+3!+……+20!的和。
n=0s=0t=1for n in range(1,21):t*=ns+=tprint(s)(1)n的作用是________________。
(2)s的作用是 ______________。
(3)t的初值必须赋值为1,这是因为_________。
(4)t*=n的等价语句是 __________(5)s+=t的等价语句是 ______。
3.调试程序。
请阅读以下程序并写出运行结果。
fruites=['banana','apple','mango']for fruit in fruites:print(fruit)a=len(fruites)print('a=',a)_________________4.以下是计算s = 1+6+11+...+ 101的程序代码,请补全程序。
s=0for i in range(1,102, ):s=print( s)请补充完成上述程序①_________ ②_________5.程序分析题学校举行校园歌手大赛,评委由6人组成。
评分方法:去掉一个最高分和一个最低分,计算其余4位评委的平均分,作为选手的最终得分。
max记录最高分; min记录最低分; s 记录六位评委的总分; aver记录最终得分。
1369:合并果⼦(fruit)【题⽬描述】在⼀个果园⾥,多多已经将所有的果⼦打了下来,⽽且按果⼦的不同种类分成了不同的堆。
多多决定把所有的果⼦合成⼀堆。
每⼀次合并,多多可以把两堆果⼦合并到⼀起,消耗的体⼒等于两堆果⼦的重量之和。
可以看出,所有的果⼦经过n−1n−1次合并之后,就只剩下⼀堆了。
多多在合并果⼦时总共消耗的体⼒等于每次合并所耗体⼒之和。
因为还要花⼤⼒⽓把这些果⼦搬回家,所以多多在合并果⼦时要尽可能地节省体⼒。
假定每个果⼦重量都为11,并且已知果⼦的种类数和每种果⼦的数⽬,你的任务是设计出合并的次序⽅案,使多多耗费的体⼒最少,并输出这个最⼩的体⼒耗费值。
例如有33种果⼦,数⽬依次为11,22,99。
可以先将 11、22堆合并,新堆数⽬为33,耗费体⼒为33。
接着,将新堆与原先的第三堆合并,⼜得到新的堆,数⽬为1212,耗费体⼒为 1212。
所以多多总共耗费体⼒=3+12=15=3+12=15。
可以证明15为最⼩的体⼒耗费值。
【输⼊】两⾏,第⼀⾏是⼀个整数nn(1≤n≤300001≤n≤30000),表⽰果⼦的种类数。
第⼆⾏包含nn个整数,⽤空格分隔,第ii个整数ai(1≤ai≤20000)ai(1≤ai≤20000)是第ii种果⼦的数⽬。
【输出】⼀⾏,这⼀⾏只包含⼀个整数,也就是最⼩的体⼒耗费值。
输⼊数据保证这个值⼩于231231。
【输⼊样例】31 2 9【输出样例】15【提⽰】【样例2输⼊】103 5 1 7 64 25 4 1【样例2输出】120#include <bits/stdc++.h>using namespace std;void show(const vector<int> &a){for (int i = 0; i < a.size(); i++) {cout << a[i] << "";}cout << endl;}int main(){// freopen("1.txt", "r", stdin);int n;cin >> n;vector<int> a(n);for (int i = 0; i < n; i++) {cin >> a[i];}// show(a);int sum = 0;greater<int> cmp = greater<int>();make_heap(a.begin(), a.end(), cmp);while (a.size() > 1) {pop_heap(a.begin(), a.end(), cmp);int m1 = a.back();a.pop_back();pop_heap(a.begin(), a.end(), cmp);int m2 = a.back();a.pop_back();int m = m1 + m2;a.push_back(m);push_heap(a.begin(), a.end(), cmp); sum += m;}cout << sum;return0;}。
qt list用法-回复什么是list?list(列表)是Python中的一种容器类型,用于存储多个数据项。
它是可变、有序且可以包含不同数据类型的对象。
列表使用方括号[ ] 来表示,在其中可以存储任意多个元素,每个元素之间用逗号进行分隔。
创建一个list要创建一个list,只需要用中括号括起来的元素列表。
下面是创建一个简单list的示例:pythonfruits = ['apple', 'banana', 'orange']在这个例子中,我们创建了一个名为fruits的list,其中包含三个元素:apple、banana和orange。
注意,list中的每个元素都是用引号括起来的字符串。
访问list中的元素要访问list中的元素,可以通过索引来获取。
索引从0开始,表示第一个元素,以此类推。
下面是一些例子:pythonfruits = ['apple', 'banana', 'orange']print(fruits[0])# 输出:appleprint(fruits[2])# 输出:orange在这个例子中,我们通过索引访问了fruits列表中的第一个和第三个元素。
向list中添加元素在list中添加元素可以使用append()函数。
这个函数用于在list的末尾添加一个新元素。
下面是一个示例:pythonfruits = ['apple', 'banana', 'orange']fruits.append('grape')print(fruits)# 输出:['apple', 'banana', 'orange', 'grape']在这个例子中,我们向fruits列表中添加了一个名为grape的新元素。
第一题题库NOIP20071.统计数字(count.pas/c/cpp)【问题描述】某次科研调查时得到了n个自然数,每个数均不超过1500000000(1.5*109)。
已知不相同的数不超过10000个,现在需要统计这些自然数各自出现的次数,并按照自然数从小到大的顺序输出统计结果。
【输入】输入文件count.in包含n+1行:第1行是整数n,表示自然数的个数。
第2~n+1行每行一个自然数。
【输出】输出文件count.out包含m行(m为n个自然数中不相同数的个数),按照自然数从小到大的顺序输出。
每行输出两个整数,分别是自然数和该数出现的次数,其间用一个空格隔开。
【输入输出样例】【限制】40%的数据满足:1<=n <=100080%的数据满足:1<=n <=50000100%的数据满足:1<=n <=200000,每个数均不超过1 500 000 000(1.5*109)NOIP20081. 笨小猴(wird.pas/c/cpp)【问题描述】笨小猴的词汇量很小,所以每次做英语选择题的时候都很头疼。
但是他找到了一种方法,经试验证明,用这种方法去选择选项的时候选对的几率非常大!这种方法的具体描述如下:假设maxn 是单词中出现次数最多的字母的出现次数,minn 是单词中出现次数最少的字母的出现次数,如果maxn-minn 是一个质数,那么笨小猴就认为这是个Lucky Word ,这样的单词很可能就是正确的答案。
【输入】输入文件word.in 只有一行,是一个单词,其中只可能出现小写字母,并且长度小于100。
【输出】输出文件word.out 共两行,第一行是一个字符串,假设输入的的单词是Lucky Word ,那么输出“Lucky Word ”,否则输出“No Answer ”;第二行是一个整数,如果输入单词是Lucky Word,输出maxn-minn 的值,否则输出0。
r语言数据合并计算在R语言中,数据合并是一种常见的操作,它可以将多个数据集按照某些共同的列进行连接,生成一个新的数据集。
数据合并可以用于数据清洗、数据分析、数据可视化等方面的工作。
常见的数据合并方式有三种:合并(merge)、连接(join)和堆叠(bind)。
合并(merge)是将两个数据集按照某个或某些列进行连接,将两个数据集中的相同列按照一定的规则合并到一起。
合并操作需要注意的是要保持两个数据集中的列的一致性。
连接(join)是将两个数据集按照某个或某些列进行连接,生成一个新的数据集。
连接操作是一种基于某个或某些列进行关联的操作,它通过列之间的某种关系将两个数据集连接在一起。
堆叠(bind)是将多个数据集按照行或列的方式进行堆叠,生成一个新的数据集。
堆叠操作可以根据具体的需求选择行堆叠(rbind)或列堆叠(cbind)。
下面以一个简单的示例来说明数据合并的使用方法。
假设我们有两个数据集:一个包含学生的成绩信息,另一个包含学生的个人信息。
我们需要创建这两个数据集:```R#创建成绩数据集score_data <- data.frame(student_id = c(1, 2, 3, 4, 5),math_score = c(90, 80, 85, 95, 75),english_score = c(80, 85, 90, 95, 85))#创建个人信息数据集info_data <- data.frame(student_id = c(1, 2, 3, 4, 5),name = c("张三", "李四", "王五", "赵六", "钱七"),gender = c("男", "男", "女", "男", "女"))```接下来,我们可以使用合并(merge)函数将两个数据集按照学生id进行合并:```R#按照学生id合并数据集merge_data <- merge(score_data, info_data, by = "student_id")```合并的结果如下所示:```student_id math_score english_score name gender1 1 90 80张三男2 2 80 85李四男3 3 85 90王五女4 4 95 95赵六男5 5 75 85钱七女```合并函数merge的参数by指定了按照哪个列进行合并,这里我们指定了"student_id",即按照学生id进行合并。
基本程序题集NOIP是一个比较基础的比赛,大家都说NOIP是考察基本算法的熟练掌握,所以个人认为无论是普及组还是提高组,都要从最最基本的题做起,要达到:只要是简单题,编完就对——不用编译;一般的题,写出来的都是对的——运行后几本上是正确的。
为了提高,于是做了一个基本程序题集,以便查找自己的不足之处。
题集目录一、贪心算法Problem1删数问题Problem2旅行家的预算Problem3线段覆盖Problem4背包问题Problem5任务调度Problem6果子合并Problem7射击竞赛Problem8任务安排Problem9最小差距二、分治算法Problem1一元三次方程的解Problem2查找第k大元素Problem3麦森数Problem4逆序对个数Problem5寻找最近点对Problem6剔除多余括号Problem7赛程安排三、搜索算法Problem1皇后问题Problem2八数码问题Problem3拼图Problem4质数方阵Problem5埃及分数Problem6字符串变换Problem7聪明的打字员Problem8 01序列Problem9生日蛋糕四、图论算法Problem1一笔画问题Problem2 Car的旅行路线Problem3求割点与桥Problem4十字绣Problem5舞会Problem6休息中的小呆Problem7最优布线问题Problem8磁盘碎片整理Problem9说谎岛Problem10 01串问题Problem11海岛地图五、数学问题Problem1数的划分Problem2最优分解方案Problem3出栈序列统计Problem4百事世界杯之旅Problem5电子锁Problem6堆塔问题Problem7取数游戏Problem8球迷购票Problem9 Fibonacci公约数Problem10传球问题Problem11约瑟夫问题Problem12青蛙过河Problem13棋盘游戏六、数据结构Problem1火车栈Problem2括号表达式Problem3银河英雄传说Problem4矩形覆盖Problem5最短路径问题Problem6果子合并七、字符串处理Problem1相对分子质量Problem2表达式求值Problem3侦探推理Problem4最长公共子串Problem5一元一次方程的解Problem6多项式乘法一、贪心算法Problem1删数问题(cutnum)题目描述:给定一正整数n(n的位数小于240),现要删除数n中的s个数码,使其得到的新数最小,求这个最小数。
C++实现LeetCode(904.⽔果装⼊果篮)[LeetCode] 904. Fruit Into Baskets ⽔果装⼊果篮In a row of trees, the `i`-th tree produces fruit with type `tree[i]`.You start at any tree of your choice, then repeatedly perform the following steps:1. Add one piece of fruit from this tree to your baskets. If you cannot, stop.2. Move to the next tree to the right of the current tree. If there is no tree to the right, stop.Note that you do not have any choice after the initial choice of starting tree: you must perform step 1, then step 2, then back to step 1, then step 2, and so on until you stop.You have two baskets, and each basket can carry any quantity of fruit, but you want each basket to only carry one type of fruit each.What is the total amount of fruit you can collect with this procedure?Example 1:Input: [1,2,1]Output: 3Explanation: We can collect [1,2,1].Example 2:Input: [0,1,2,2]Output: 3Explanation: We can collect [1,2,2]. If we started at the first tree, we would only collect [0, 1].Example 3:Input: [1,2,3,2,2]Output: 4Explanation: We can collect [2,3,2,2]. If we started at the first tree, we would only collect [1, 2].Example 4:Input: [3,3,3,1,2,1,1,2,3,3,4]Output: 5Explanation: We can collect [1,2,1,1,2]. If we started at the first tree or the eighth tree, we would only collect 4fruits.Note:1. 1 <= tree.length <= 400002. 0 <= tree[i] < tree.lengthclass Solution {public:int totalFruit(vector<int>& tree) {int res = 0, start = 0, n = tree.size();unordered_map<int, int> fruitCnt;for (int i = 0; i < n; ++i) {++fruitCnt[tree[i]];while (fruitCnt.size() > 2) {if (--fruitCnt[tree[start]] == 0) {fruitCnt.erase(tree[start]);}++start;}res = max(res, i - start + 1);}return res;}};我们除了⽤ HashMap 来映射字符出现的个数,我们还可以映射每个数字最新的坐标,⽐如题⽬中的例⼦ [0,1,2,2],遇到第⼀个0,映射其坐标0,遇到1,映射其坐标1,当遇到2时,映射其坐标2,每次我们都判断当前 HashMap 中的映射数,如果⼤于2的时候,那么需要删掉⼀个映射,我们还是从 start=0 时开始向右找,看每个字符在 HashMap 中的映射值是否等于当前坐标 start,⽐如0,HashMap 此时映射值为0,等于 left 的0,那么我们把0删掉,start ⾃增1,再更新结果,以此类推直⾄遍历完整个数组,参见代码如下:解法⼆:class Solution {public:int totalFruit(vector<int>& tree) {int res = 0, start = 0, n = tree.size();unordered_map<int, int> fruitPos;for (int i = 0; i < n; ++i) {fruitPos[tree[i]] = i;while (fruitPos.size() > 2) {if (fruitPos[tree[start]] == start) {fruitPos.erase(tree[start]);}++start;}res = max(res, i - start + 1);}return res;}};后来⼜在⽹上看到了⼀种解法,这种解法是维护⼀个滑动窗⼝ sliding window,指针 left 指向起始位置,right 指向 window 的最后⼀个位置,⽤于定位 left 的下⼀个跳转位置,思路如下:若当前字符和前⼀个字符相同,继续循环。