pta作業中有啟發性的程序題

1

【知識點】:多態

函數接口定義:

以Student為基類,構建GroupA, GroupB和GroupC三個類

裁判測試程序樣例:

#include<iostream>
#include <string>
using namespace std;/* 請在這里填寫答案 */int main()
{const int Size=50;string num, name;int i,ty,s1,s2,s3,s4,s5;char gs;Student *pS[Size];int count=0;for(i=0;i<Size;i++){cin>>ty;if(ty==0) break;cin>>num>>name>>s1>>s2;switch(ty){case 1:pS[count++]=new GroupA(num, name, s1, s2); break;case 2:cin>>gs; pS[count++]=new GroupB(num, name, s1,s2, gs); break;case 3:cin>>s3>>s4>>s5; pS[count++]=new GroupC(num, name, s1,s2,s3,s4,s5); break;}            }for(i=0;i<count;i++) {pS[i]->display();delete pS[i];}return 0;
}

?

【難點】:要記錄A,B兩類當中平均分最高的人,以便后面A,B類自己比較以及C類比較

【啟發點】:用函數來獲取A,B類當中的最高分

class Student
{public:string NO;string name;Student(string n,string na):NO(n),name(na){}virtual void display()=0;
};
double getAwardLine();
class GroupA:public Student
{public:static double highestavg;int s1,s2;float avg;GroupA(string n,string na,int a1,int a2):Student(n,na),s1(a1),s2(a2){avg=(s1+s2)/2.0;//先找出A類當中平均分最高的 if(avg>highestavg)highestavg=avg;}double getavg(){return (s1+s2)/2.0;}virtual void display(){if(getavg() == getAwardLine())cout << NO << " " << name << endl;}
};double GroupA::highestavg=0;
class GroupB:public Student
{public:static double highestavg;int s1,s2;char gs;float avg;GroupB(string n,string na,int a1,int a2,char g):Student(n,na),s1(a1),s2(a2),gs(g){avg=(s1+s2)/2.0;//同樣找出B類當中平均分最高的 if(avg>highestavg)highestavg=avg;}double getavg(){return (s1+s2)/2.0;}char getgs(){return gs;}virtual void display(){//在B類當中可以直接比較A,B類的最高分哪個更高作為獲獎線 double awardLine = (GroupA::highestavg > GroupB::highestavg) ? GroupA::highestavg : GroupB::highestavg;if(getavg()==awardLine||getavg()>=awardLine*0.7&&gs=='A')cout<<NO<<" "<<name<<endl;}
};
double GroupB::highestavg=0;
class GroupC:public Student
{public:int s1,s2,s3,s4,s5;float avg;GroupC(string n,string na,int a1,int a2,int a3,int a4,int a5):Student(n,na),s1(a1),s2(a2),s3(a3),s4(a4),s5(a5){avg=(s1+s2+s3+s4+s5)/5.0;}double getavg(){return(s1+s2+s3+s4+s5)/5.0;}virtual void display(){double awardLine = (GroupA::highestavg > GroupB::highestavg) ? GroupA::highestavg : GroupB::highestavg;if(getavg()>=awardLine*0.9)cout<<NO<<" "<<name<<endl;}};
//使用函數來獲取A,B類當中最高分,可以避免在A類中使用B類數據時B類還未完全定義而造成的報錯 
double getAwardLine() {return (GroupA::highestavg > GroupB::highestavg) ? GroupA::highestavg : GroupB::highestavg;
}

2

【知識點】:應用虛函數實現多態

?

寫各個派生類:

class Drink
{protected:int NO;int amount;//數量public:virtual void display()=0;//輸出提供時間Drink(int n,int a):NO(n),amount(a){}
};
//本地茶每份要50秒,其它茶要20秒;
class Tea:public Drink
{public:int area;Tea(int n,int a,int ar):Drink(n,a),area(ar){}virtual void display(){if(area==1)cout<<NO<<" "<<50*amount<<endl;elsecout<<NO<<" "<<20*amount<<endl;}};
//現磨咖啡要加120秒,其它咖啡加20秒;
class Coffee:public Drink
{
public:
int jgdm;
Coffee(int n,int a,int j):Drink(n,a),jgdm(j){}virtual void display(){if(jgdm==1)cout<<NO<<" "<<120*amount<<endl;elsecout<<NO<<" "<<20*amount<<endl;}
};
//牛奶每份10秒。
class Milk:public Drink
{public:Milk(int n,int a):Drink(n,a){}virtual void display(){  cout<<NO<<" "<<10*amount<<endl;}
};

【啟發點】:對輸入輸出的處理

int main()
{//基類的指針數組用來存放各個飲品,數組里的每一個元素都是一個基類指針//基類指針可以指向派生類的對象 Drink *pd[10];int type;int n;int a;int ar;int j;int cnt=0;//對輸入的處理 while(cin>>type&&type!=0){if(type==1){cin>>n>>a>>ar;pd[cnt++]=new Tea(n,a,ar);}else if(type==2){cin>>n>>a>>j;pd[cnt++]=new Coffee(n,a,j);}else if(type==3){cin>>n>>a;pd[cnt++]=new Milk(n,a);}}for(int i=0;i<cnt;i++){pd[i]->display();delete pd[i];}
}

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/904281.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/904281.shtml
英文地址,請注明出處:http://en.pswp.cn/news/904281.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Scrapy框架之CrawlSpider爬蟲 實戰 詳解

CrawlSpider 是 Scrapy 框架中一個非常實用的爬蟲基類&#xff0c;它繼承自 Spider 類&#xff0c;主要用于實現基于規則的網頁爬取。相較于普通的 Spider 類&#xff0c;CrawlSpider 可以根據預定義的規則自動跟進頁面中的鏈接&#xff0c;從而實現更高效、更靈活的爬取。 Scr…

Glide 如何加載遠程 Base64 圖片

最近有個需求&#xff0c;后端給出的圖片地址并不是正常的 URL&#xff0c;而且需要一個接口去請求&#xff0c;但是返回的是 base64 數據流。這里不關心為啥要這么多&#xff0c;原因有很多&#xff0c;可能是系統的問題&#xff0c;也可能是能力問題。當然作為我們 Android 程…

004-nlohmann/json 快速認識-C++開源庫108杰

了解 nlohmann/json 的特點&#xff1b;理解編程中 “數據戰場”劃分的概念&#xff1b;迅速上手多種方式構建一個JSON對象&#xff1b; 1 特點與安裝 nlohmann/json 是一個在 github 長期霸占 “JSON” 熱搜版第1的CJSON處理庫。它的最大優點是與 C 標準庫的容器數據&#xf…

#基礎Machine Learning 算法(上)

機器學習算法的分類 機器學習算法大致可以分為三類&#xff1a; 監督學習算法 (Supervised Algorithms&#xff09;:在監督學習訓練過程中&#xff0c;可以由訓練數據集學到或建立一個模式&#xff08;函數 / learning model&#xff09;&#xff0c;并依此模式推測新的實例。…

正弦波、方波、三角波和鋸齒波信號發生器——Multisim電路仿真

目錄 Multisim使用教程說明鏈接 一、正弦波信號發生電路 1.1正弦波發生電路 電路組成 工作原理 振蕩頻率 1.2 正弦波發生電路仿真分析 工程文件鏈接 二、方波信號發生電路 2.1 方波發生電路可調頻率 工作原理 詳細過程 2.2 方波發生電路可調頻率/可調占空比 調節占空比 方波產生…

【AND-OR-~OR鎖存器設計】2022-8-31

緣由鎖存器11111111111-硬件開發-CSDN問答 重置1&#xff0c;不論輸入什么&#xff0c;輸出都為0&#xff1b; 重置0&#xff0c;輸入1就鎖住1 此時輸入再次變為0&#xff0c;輸出不變&#xff0c;為鎖住。

力扣-字符串-468 檢查ip

思路 考察字符串的使用&#xff0c;還有對所有邊界條件的檢查 spilt&#xff08;“\.”&#xff09;&#xff0c;toCharArray&#xff0c;Integer.parseInt() 代碼 class Solution {boolean checkIpv4Segment(String str){if(str.length() 0 || str.length() > 4) retur…

BC8 十六進制轉十進制

題目&#xff1a;BC8 十六進制轉十進制 描述 BoBo寫了一個十六進制整數ABCDEF&#xff0c;他問KiKi對應的十進制整數是多少。 輸入描述&#xff1a; 無 輸出描述&#xff1a; 十六進制整數ABCDEF對應的十進制整數&#xff0c;所占域寬為15。 備注&#xff1a; printf可以使用…

ARM子程序和棧

微處理器中的棧由棧指針指向存儲器中的棧頂來實現&#xff0c;當數據項入棧時&#xff0c;棧 指針向上移動&#xff0c;當數據項出棧時&#xff0c;棧指針向下移動。 實現棧時需要做出兩個決定&#xff1a;一是當數據項進棧時是向低位地址方向向上生 長&#xff08;圖a和圖b&a…

jwt身份驗證和基本的利用方式

前言 &#xff1a; 什么是jwt&#xff08;json web token&#xff09;&#xff1f; 看看英文單詞的意思就是 json形式的token 他的基本的特征 &#xff1a; 類似于這樣的 他有2個點 分割 解碼的時候會有三個部分 頭部 payload 對稱密鑰 這個就是對稱加密 頭部&am…

n8n工作流自動化平臺的實操:利用本地嵌入模型,完成文件內容的向量化及入庫

1.成果展示 1.1n8n的工作流 牽涉節點&#xff1a;FTP、Code、Milvus Vector Store、Embeddings OpenAI、Default Data Loader、Recursive Character Text Splitter 12.向量庫的結果 2.實操過程 2.1發布本地嵌入模型服務 將bge-m3嵌入模型&#xff0c;發布成滿足open api接口…

MATLAB人工大猩猩部隊GTO優化CNN-LSTM多變量時間序列預測

本博客來源于CSDN機器魚&#xff0c;未同意任何人轉載。 更多內容&#xff0c;歡迎點擊本專欄目錄&#xff0c;查看更多內容。 目錄 0 引言 1 數據準備 2 CNN-LSTM模型搭建 3 GTO超參數優化 3.1 GTO函數極值尋優 3.2 GTO優化CNN-LSTM超參數 3.3 主程序 4 結語 0 引言…

git項目遷移,包括所有的提交記錄和分支 gitlab遷移到gitblit

之前git都是全新項目上傳&#xff0c;沒有遷移過&#xff0c;因為遷移的話要考慮已有項目上的分支都要遷移過去&#xff0c;提交記錄能遷移就好&#xff1b;分支如果按照全新項目上傳的方式需要新git手動創建好老git已有分支&#xff0c;在手動一個一個克隆老項目分支代碼依次提…

Photo-SLAM論文理解、環境搭建、代碼理解與實測效果

前言&#xff1a;第一個解耦式Photo-SLAM&#xff0c;亮點和效果。 參考&#xff1a;https://zhuanlan.zhihu.com/p/715311759 全網最細PhotoSLAM的conda環境配置教程&#xff0c;拒絕環境污染&#xff01;&#xff01;-CSDN博客 1. 環境搭建 硬件&#xff1a;RTX 4090D wi…

如何使用VSCode編寫C、C++和Python程序

一、首先準備好前期工作。如下載安裝Python、VSCode、一些插件等。寫代碼之前需要先創建文件夾和文件。 二、將不同語言寫的代碼放在不同的文件夾中&#xff0c;注意命名時不要使用中文。 三、打開VSCode&#xff0c;點擊“文件”->“打開文件夾”->“daimalainxi”->…

基于不確定性感知學習的單圖像自監督3D人體網格重建 (論文筆記與思考)

文章目錄 論文解決的問題提出的算法以及啟發點 論文解決的問題 首先這是 Self-Supervised 3D Human mesh recovery from a single image with uncertainty-aware learning &#xff08;AAAI 2024&#xff09;的論文筆記。該文中主要提出了一個自監督的framework用于人體的姿態…

Leetcode刷題記錄33——二叉樹的最小深度

題源&#xff1a;https://leetcode.cn/problems/minimum-depth-of-binary-tree/description/ 題目描述&#xff1a; 思路一&#xff1a; 使用 DFS 遞歸遍歷的解法&#xff0c;每當遍歷到一條樹枝的葉子節點&#xff0c;就會更新最小深度&#xff0c;當遍歷完整棵樹后&#x…

有效的括號(20)

20. 有效的括號 - 力扣&#xff08;LeetCode&#xff09; 解法&#xff1a; class Solution { public:bool isValid(string s) {unordered_map<char, char> m {{), (}, {],[}, {}, {}};stack<char> stk;for (int i 0; i < s.size(); i) {if (s[i] ( || s[i…

電子郵件相關協議介紹

0 Preface/Foreword 1 協議介紹 電子郵件包含的主要協議&#xff1a; SMTPPOPIMAP 1.1 SMPT SMPT: Simple Mail Transfer Protocol&#xff0c;電子郵件傳輸的標準協議&#xff0c;負責將郵件從發送方傳輸到接收方郵件服務器。 1.2 POP POP&#xff1a; Post Office Protoc…

Linux壓縮和解壓類

一、gzip/gunzip 壓縮 1、基本語法 gzip 文件 &#xff08;功能描述&#xff1a;壓縮文件&#xff0c;只能將文件壓縮為*.gz文件&#xff09; gunzip 文件.gz &#xff08;功能描述&#xff1a;解壓縮文件命令&#xff09; 2、經驗技巧 &#xff08;1&#…