湖南大学CG题库-(程序设计类课程教学辅助系统作业)【《HNU官方题解全集》】[绝密]—2021-2025

前言:如果你是HUNER,你可以用它来作为你的程序设计作业参考,加以学习,相信这档【官方题解】必能让你的编程学习轻松很多;对非HUNER的朋友,也可以用它作为参考,作为拓展,作为自我提高。
说明:

  1. 此文章最终将覆盖——我在HNU-CG遇到的题,这是我做出的承诺。但,我决定弄这件事时还在2021大一上,所以我会将一级目录分成每个学期,二级目录分成每个作业编号,三级目录分为每个题目名称——这样分步完成。其中:部分题解答分为A、B,A为首解,B为补充的解(会用基础的语法),当然片段编程题只有A解
  2. 对于每次CG作业,如果题目过于简单,我可能会晚一点更新——这是很正常的事情
  3. CG题目主要是程序设计题,面对全选择填空题的作业,我也会补充相应的知识点
  4. 由于HNU的老师从不给出作业的官方题解,所以我声明“官方”两字。老师不会拿我怎么样的
  5. 不做专栏的原因:HNU-CG上的题大部分是对语法考察多的模拟题,对算法考察难度较小,深入研究意义不大,且对非Hnuer的朋友帮不够友好
  6. 对校外朋友的HNUCG介绍:CG是HNU作业提交和考试的平台。目前看来,每次题目的前缀有“作业”、“实验”两种,还有突然跑出来的项目作业,以及可爱的考试,所以该官方题解也会有四种类型
  7. 关于每篇篇末的总结,到期末复习时会正式给出

大一上学期⋙

实验九-结构题

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
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

0<Solving)1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值