前言:如果你是HUNER,你可以用它来作为你的程序设计作业参考,加以学习,相信这档【官方题解】必能让你的编程学习轻松很多;对非HUNER的朋友,也可以用它作为参考,作为拓展,作为自我提高。
说明:
- 此文章最终将覆盖——我在HNU-CG遇到的题,这是我做出的承诺。但,我决定弄这件事时还在2021大一上,所以我会将一级目录分成每个学期,二级目录分成每个作业编号,三级目录分为每个题目名称——这样分步完成。其中:部分题解答分为A、B,A为首解,B为补充的解(会用基础的语法),当然片段编程题只有A解
- 对于每次CG作业,如果题目过于简单,我可能会晚一点更新——这是很正常的事情
- CG题目主要是程序设计题,面对全选择填空题的作业,我也会补充相应的知识点
- 由于HNU的老师从不给出作业的官方题解,所以我声明“官方”两字。
老师不会拿我怎么样的 - 不做专栏的原因:HNU-CG上的题大部分是对语法考察多的模拟题,对算法考察难度较小,深入研究意义不大,且对非Hnuer的朋友帮不够友好。
- 对校外朋友的HNUCG介绍:CG是HNU作业提交和考试的平台。目前看来,每次题目的前缀有“作业”、“实验”两种,还有突然跑出来的项目作业,以及可爱的考试,所以该官方题解也会有四种类型
- 关于每篇篇末的总结,到期末复习时会正式给出
大一上学期⋙
实验九-结构题
1. 评委打分
A解
#include<iostream>
#include<string>
#include<cmath>
#include<algorithm>
using namespace std;
class student{
public:
string name;
int score;
};
int main(){
int n;
cin>>n;
student* ss=new student[n];
for(int i=0;i<n;i++){
string tmp;
cin>>tmp;
ss[i].name=tmp;
int a[7];
int mx=-101;
int mi=101;
int sum=0;
for(int i=0;i<7;i++){
cin>>a[i];
sum+=a[i];
mx=max(a[i],mx); //依次输入7组数据,每次输入更新最大最小值
mi=min(a[i],mi);
}
ss[i].score=(sum-mi-mx);
}
sort(ss,ss+n,[&](student a,student b){
return a.score>b.score;//匿名表达式,对自定义类型定义排序规则
});
for(int i=0;i<n;i++)cout<<ss[i].name<<' '<<ss[i].score<<endl;
delete[]ss;
return 0;
}
2. 选举
A解
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
class person{
public:
int id;
int ws;
person(int a):id(a),ws(0){
}
};
int main(){
int n,m;
cin>>n>>m;
vector<person>tm;
for(int i=0;i<n;i++){
person tmp(i+1);
tm.emplace_back(tmp); //初始化候选人数组tm
}
while(m--){
int a[n];
int mx=-1;
int winner=-1;
for(int i=0;i<n;i++){
cin>>a[i];
if(a[i]>mx){
mx=a[i];
winner=i;
}
}
tm[winner].ws++; //记录赢得的城市数
}
stable_sort(tm.begin(),tm.end(),[&](person s1,person s2){
return s1.ws>s2.ws;
});//用stable_sort保证排序前后相对顺序不变,因为要按编号小的要放前面
cout<<tm[0].id<<endl;//输出第一名
return 0;
}
3. 招聘
A解
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
struct person{
int K;
int I;
int E;
};
int main(){
int n;
cin>>n;
person* ps=new person[n];
int jie=0;
for(int i=0;i<n;i++)cin>>ps[i].K;
for(int i=0;i<n;i++)cin>>ps[i].I;
for(int i=0;i<n;i++)cin>>ps[i].E; //输入数据
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(j!=i){
if(ps[j].K>ps[i].K&&ps[j].I>ps[i].I&&ps[j].E>ps[i].E){
jie++;break;}
}
}
} //循环两次,做一下BP
cout<<jie<<endl;
delete[]ps;
return 0;
}
4. 火星人足球赛
A解
#include<iostream>
#include<vector>
#include<algorithm>
#include<string>
using namespace std;
class player{
public:
char team;
int id;
int time;
player(char a_team,int a_id,int a_time):team(a_team),id(a_id),time(a_time){
}
bool operator==(player& p){
return this->team==p.team&&this->id==p.id;
}
};
bool myfind(vector<player>a,player target){
for(auto it:a)
if(it==target)return true;//自定义查找
return false;
}
int main(){
pair<string,vector<player>>h;
pair<string,vector<player>>a;//pair存储两队基本信息
cin>>h.first>>a.first;
vector<player>th;
vector<player>ta;//创建数组th,ta,存放黄牌的队员
int n;
cin>>n;
while(n--){
//关键的犯规处理
int a_time;
char a_team;
int a_id;
char jd;
cin>>a_time>>a_team>>a_id>>jd;
player tmp(a_team,a_id,a_time);
if(jd=='r'){
//红牌直接放
if(tmp.team=='h')h.second.emplace_back(tmp);
else a.second.emplace_back(tmp);
}
else{
//黄牌处理时,多加一下查找
if(tmp.team=='h'){
if(myfind(th,tmp))h.second.emplace_back(tmp);
else th.emplace_back(tmp);
}
else{
if(myfind(ta,tmp))a.second.emplace_back(tmp);
else ta.emplace_back(tmp);
}
}
}
if(h.second.empty()&&a.second.empty())cout<<"No Red Card"<<endl;
else{
//对处理后的数据进行处理,排序
sort(h.second.begin(),h.second.end(),[&](player p1,player p2){
if(p1.time!=p2.time)return p1.time<p2.time;
else return p1.id>p2.id;
});
sort(a.second.begin(),a.second.end(),[&](player p1,player p2){
if(p1.time!=p2.time)return p1.time<p2.time;
else return p1.id>p2.id;
});
for(auto it:h.second){
cout<<h.first<<' '<<it.id<<' '<<it.time<<endl;
}
for(auto it:a.second){
cout<<a.first<<' '<<it.id<<' '<<it.time<<endl;
}
}
return 0;
}
5. 看电影
A解
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
struct film{
int id;
int b; //音频
int c; //字幕
int fc; //非常高兴
int jb; //基本满意
};
class cmp{
//STL,自定义比较
public:
bool operator()(film f1,film f2){
if(f1.fc!=f2.fc)return f1.fc>f2.fc;
else return f1.jb>f2.jb;
}
};
int main(){
int n;
cin>>n