<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      day02:函數(shù)&遞歸&結(jié)構(gòu)體&sort(a,a+n,cmp);

      day02:函數(shù)&遞歸&結(jié)構(gòu)體&sort(a,a+n,cmp);

      函數(shù):其實(shí)就是將一個(gè)方法進(jìn)行封裝,方便下次調(diào)用,主要注意傳入?yún)?shù)與返回參數(shù)

      #include<cmath> 
      floor(3.14) = 3 向下取整 
      ceil(3.14) = 4  向上取整
      abs(-1) = 1     取絕對(duì)值
      pow(2,3)=2*2*2 = 8
      pow(a,n)        n個(gè)a的乘積 
      

      遞歸:就是按照某一個(gè)規(guī)則進(jìn)行套娃的游戲,依賴于函數(shù)的嵌套,同時(shí)遞歸需要注意兩個(gè)點(diǎn):

      1. 遞歸出口:什么時(shí)候游戲結(jié)束,或者破壞了游戲規(guī)則

      2. 遞歸條件:什么繼續(xù)下次游戲,注意看是否需要打標(biāo)記

      如:給出一個(gè)數(shù)n,遞歸輸出1-n

      很容易對(duì)吧!直接for就可以,但是現(xiàn)在規(guī)定你必須用遞歸來做,怎么辦呢?
      首先:確定一個(gè)遞歸表達(dá)式 dfs(int i){} // i 表示遞歸層數(shù),并用作結(jié)果輸出
      找到遞歸出口:當(dāng)輸出結(jié)果為n,也就是i>n就停止
      如果沒有找到遞歸出口,就繼續(xù)遞歸i+1

      #include<bits/stdc++.h>
      using namespace std;
      int n;
      void dfs(int i){
          if(i>n)	return;//遞歸出口
          printf("%d ", i);
          dfs(i+1); //繼續(xù)遞歸
      }
      int main(){
          cin>>n; dfs(1);
          return 0;
      }
      

      結(jié)構(gòu)體:

      struct T{
          string name;  //屬性
          int age;
          int score1,score2,score3;
          int sum(){    //行為
              return score1+score2+score3;
          }
      }stu[100];
      

      我們可以將它(T)看做一類人,而stu[100];就是這一類人中的100個(gè)人,他們具有相似的屬性(name,age,score)和行為(sum())

      結(jié)構(gòu)體一般在泛型排序結(jié)合貪心的題型上使用,如:

      給出5個(gè)人的信息(包括姓名,年齡,三門學(xué)科分?jǐn)?shù)),現(xiàn)在讓你按照三門學(xué)科總分進(jìn)行降序排序,如果總分相同則年齡小的在前面

      #include<bits/stdc++.h>
      using namespace std;
      const int N=100, n=5;
      struct T{
          string name;
          int age;
          int score1,score2, score3;
          int sum(){
              return score1+score2+score3; 
          }
      }stu[N];
      
      //按照總分大小排序,如果總分相同按照年齡小大排序 
      bool cmp(T a, T b){
          if(a.sum()!=b.sum()) return a.sum()>b.sum();
          return a.age<b.age;
      }
      
      /*輸入樣例: 
      a 11 100 100 100
      b 22 80  90  90
      c 33 90  90  90
      d 44 80  80  80
      e 55 90  80  80
      */
      int main(){
          for(int i=0; i<n; i++){
      	cin>>stu[i].name>>stu[i].age>>stu[i].score1>>stu[i].score2>>stu[i].score3;
          }
          sort(stu, stu+n, cmp);
          for(int i=0; i<n; i++){
              cout<<stu[i].name<<" "<<stu[i].age<<" "<<stu[i].sum()<<endl;
          }return 0;
      }
      

      1. B2134 質(zhì)數(shù)的和與積

      【題目描述】?jī)蓚€(gè)質(zhì)數(shù)的和是 S,它們的積最大是多少?

      輸入格式:一個(gè)不大于 10000 的正整數(shù) S,為兩個(gè)質(zhì)數(shù)的和。

      輸出格式:一個(gè)整數(shù),為兩個(gè)質(zhì)數(shù)的最大乘積。數(shù)據(jù)保證有解。

      輸入樣例:50

      輸出樣例:589

      題解:

      #include<bits/stdc++.h>
      using namespace std;
      bool isPrime(int n) {
          if(n<2) return false;
          for(int i=2; i*i<=n; i++)
              if(n%i==0) return false;
          return true;
      }
      int main() {
          int n,max=0;  cin>>n;
          for(int i=2; i<=n; i++) {
              if(isPrime(i) && isPrime(n-i)) {
                  int num = i*(n-i);
                  if(max<num) max = num;//最大值
              }
          }
          cout<<max; return 0;
      }
      

      2. P1255 數(shù)樓梯

      【題目描述】樓梯有 N階,上樓可以一步上一階,也可以一步上二階。

      編一個(gè)程序,計(jì)算共有多少種不同的走法。

      輸入格式:一個(gè)數(shù)字,樓梯數(shù)。

      輸出格式:輸出走的方式總數(shù)。

      輸入樣例:4

      輸出樣例:5

      說明/提示:對(duì)于60% 的數(shù)據(jù),N≤50;對(duì)于100% 的數(shù)據(jù),N≤5000。

      題解:這道題目需要使用高精度,所以按照long long能過40分就OK。

      #include<iostream>
      using namespace std;
      long long dfs(int num){// 樓梯數(shù) 
          if(num==1) return 1;
          else if(num==2) return 2;
          return dfs(num-1)+dfs(num-2);
          //dfs(i-1) --> 走一階樓梯
      }
      int main(){
          int n=4; cin>>n;
          cout<<dfs(n);
          return 0;
      } 
      

      3. P1706 全排列問題

      【題目描述】按照字典序輸出自然數(shù) 11 到 nn 所有不重復(fù)的排列,即 nn 的全排列,要求所產(chǎn)生的任一數(shù)字序列中不允許出現(xiàn)重復(fù)的數(shù)字。

      輸入格式:一個(gè)整數(shù) n(1≤n≤9)

      輸出格式:由 1~n 組成的所有不重復(fù)的數(shù)字序列,每行一個(gè)序列。每個(gè)數(shù)字保留 5 個(gè)場(chǎng)寬

      輸入樣例:3

      輸出樣例:

          1    2    3
          1    3    2
          2    1    3
          2    3    1
          3    1    2
          3    2    1
      

      題解:

      #include<bits/stdc++.h>
      using namespace std;
      const int N=1000;
      int n=3;
      int vis[N], a[N];
      
      //遞歸選擇數(shù)據(jù)個(gè)數(shù) 
      void dfs(int k){
          if(k>n){
              for(int i=1; i<=n; i++){
                  cout<<setw(5)<<a[i];//輸出控制5個(gè)寬度 
              }cout<<endl;
              return;
          }
          for(int i=1; i<=n; i++){
              if(vis[i]==0){
                  vis[i]=1;
                  a[k]=i;
                  dfs(k+1);
                  vis[i]=0;//回溯到上一級(jí) 
              }
          }
      }
      int main(){
          cin>>n;    dfs(1);
          return 0;
      }
      

      4. P5740 【深基7.例9】最厲害的學(xué)生

      【題目描述】現(xiàn)有 N(N≤1000) 名同學(xué)參加了期末考試,并且獲得了每名同學(xué)的信息:姓名(不超過 8 個(gè)字符的字符串,沒有空格)、語文、數(shù)學(xué)、英語成績(jī)(均為不超過 150 的自然數(shù))。總分最高的學(xué)生就是最厲害的,請(qǐng)輸出最厲害的學(xué)生各項(xiàng)信息(姓名、各科成績(jī))。如果有多個(gè)總分相同的學(xué)生,輸出靠前的那位。

      輸入格式:先輸入數(shù)字 n,表示有n個(gè)學(xué)生,再輸入n行,每行包含學(xué)生姓名,語文、數(shù)學(xué)、英語成績(jī)

      輸出格式:最厲害的學(xué)生各項(xiàng)信息(姓名、語文、數(shù)學(xué)、英語成績(jī))

      輸入樣例:

      3
      senpai 114 51 4
      lxl 114 10 23
      fafa 51 42 60
      

      輸出樣例:

      senpai 114 51 4
      

      題解:

      #include<bits/stdc++.h>
      using namespace std;
      const int N=1e3;
      struct T{
          string name;
          int a,b,c,id;
          int sum(){
              return a+b+c;
          }
      }stu[N];
      
      bool cmp(T a, T b){
          if(a.sum()!=b.sum()) return a.sum() > b.sum();//按照總分降序排序
          return a.id < b.id; //總分相同,按照學(xué)號(hào)升序排序
      }
      int main() {
          int n; cin>>n;
          for(int i=0; i<n; i++){
              stu[i].id = i;
              cin>>stu[i].name>>stu[i].a>>stu[i].b>>stu[i].c;
          }
          sort(stu, stu+n, cmp);//自定義排序方式
      
          int i=0;
          cout<<stu[i].name<<" "<<stu[i].a<<" "<<stu[i].b<<" "<<stu[i].c;
          return 0;
      }
      
      --------------------------------------
      #include<bits/stdc++.h>//其實(shí)這道題目不用結(jié)構(gòu)體也能做-舒同學(xué)的解法
      using namespace std;
      string a[1001];
      int b[1001][4],sum,maxb,maxa,n;//全局變量默認(rèn)初始化0 
      int main() {
          cin>>n;
          for(int i=0; i<n; i++) {
              cin>>a[i]>>b[i][1]>>b[i][2]>>b[i][3];//信息輸入 
              sum=b[i][1]+b[i][2]+b[i][3];//總分求和 
              if(maxb<sum) {
                  maxb=sum;
                  maxa=i;
              }
          }
          cout<<a[maxa]<<" "<<b[maxa][1]<<" "<<b[maxa][2]<<" "<<b[maxa][3];
          return 0;
      }
      

      5. P5742 【深基7.例11】評(píng)等級(jí)

      【題目描述】現(xiàn)有 N(N≤1000) 名同學(xué),每名同學(xué)需要設(shè)計(jì)一個(gè)結(jié)構(gòu)體記錄以下信息:學(xué)號(hào)(不超過 100000 的正整數(shù))、學(xué)業(yè)成績(jī)和素質(zhì)拓展成績(jī)(分別是 0 到 100 的整數(shù))、綜合分?jǐn)?shù)(實(shí)數(shù))。每行讀入同學(xué)的姓名、學(xué)業(yè)成績(jī)和素質(zhì)拓展成績(jī),并且計(jì)算綜合分?jǐn)?shù)(分別按照 70% 和 30% 權(quán)重累加),存入結(jié)構(gòu)體中。還需要在結(jié)構(gòu)體中定義一個(gè)成員函數(shù),返回該結(jié)構(gòu)體對(duì)象的學(xué)業(yè)成績(jī)和素質(zhì)拓展成績(jī)的總分。

      然后需要設(shè)計(jì)一個(gè)函數(shù),其參數(shù)是一個(gè)學(xué)生結(jié)構(gòu)體對(duì)象,判斷該學(xué)生是否“優(yōu)秀”。優(yōu)秀的定義是學(xué)業(yè)和素質(zhì)拓展成績(jī)總分大于140 分,且綜合分?jǐn)?shù)不小于 80 分。

      輸入格式:

      第一行一個(gè)整數(shù) N,接下來 N 行,每行 3 個(gè)整數(shù),依次代表學(xué)號(hào)、學(xué)業(yè)成績(jī)和素質(zhì)拓展成績(jī)。

      輸出格式:N 行,如果第 i 名學(xué)生是優(yōu)秀的,輸出 Excellent,否則輸出 Not excellent

      輸入樣例:

      4
      1223 95 59
      1224 50 7
      1473 32 45
      1556 86 99
      

      輸出樣例:

      Excellent
      Not excellent
      Not excellent
      Excellent
      

      題解:

      #include<bits/stdc++.h>
      using namespace std;
      struct T{
          int id;
          int s1,s2;//學(xué)業(yè)成績(jī)和素質(zhì)拓展成績(jī)
          double s3;//綜合分?jǐn)?shù)(實(shí)數(shù))
          double sum1(){//學(xué)業(yè)成績(jī)和素質(zhì)拓展成績(jī)的總分
              return s1+s2;
          }
      }stu[1000];
      
      int main(){
          int n; cin>>n;
          for(int i=0; i<n; i++){
              cin>>stu[i].id>>stu[i].s1>>stu[i].s2;
              stu[i].s3=0.7*stu[i].s1+0.3*stu[i].s2;
          }
          for(int i=0; i<n; i++){
              if(stu[i].sum1()>140 && stu[i].s3>=80){//優(yōu)生條件
                  cout<<"Excellent"<<endl;
              }else{
                  cout<<"Not Excellent"<<endl;
              }
          } return 0;
      }
      

      6. P1093 [NOIP2007 普及組] 獎(jiǎng)學(xué)金

      【題目描述】某小學(xué)最近得到了一筆贊助,打算拿出其中一部分為學(xué)習(xí)成績(jī)優(yōu)秀的前5名學(xué)生發(fā)獎(jiǎng)學(xué)金。期末,每個(gè)學(xué)生都有3門課的成績(jī):語文、數(shù)學(xué)、英語。先按總分從高到低排序,如果兩個(gè)同學(xué)總分相同,再按語文成績(jī)從高到低排序,如果兩個(gè)同學(xué)總分和語文成績(jī)都相同,那么規(guī)定學(xué)號(hào)小的同學(xué) 排在前面,這樣,每個(gè)學(xué)生的排序是唯一確定的。

      任務(wù):先根據(jù)輸入的3門課的成績(jī)計(jì)算總分,然后按上述規(guī)則排序,最后按排名順序輸出前五名名學(xué)生的學(xué)號(hào)和總分。注意,在前5名同學(xué)中,每個(gè)人的獎(jiǎng)學(xué)金都不相同,因此,你必須嚴(yán)格按上述規(guī)則排序。例如,在某個(gè)正確答案中,如果前兩行的輸出數(shù)據(jù)(每行輸出兩個(gè)數(shù):學(xué)號(hào)、總分) 是:

      7 279
      5 279
      

      這兩行數(shù)據(jù)的含義是:總分最高的兩個(gè)同學(xué)的學(xué)號(hào)依次是7號(hào)、5號(hào)。這兩名同學(xué)的總分都是 279 (總分等于輸入的語文、數(shù)學(xué)、英語三科成績(jī)之和) ,但學(xué)號(hào)為7的學(xué)生語文成績(jī)更高一些。如果你的前兩名的輸出數(shù)據(jù)是:

      5 279
      7 279
      

      則按輸出錯(cuò)誤處理,不能得分。

      輸入格式:

      共n+1行
      第1行為一個(gè)正整數(shù)n(n≤300),表示該校參加評(píng)選的學(xué)生人數(shù)。
      第2到n+1行,每行有3個(gè)用空格隔開的數(shù)字,每個(gè)數(shù)字都在0到100之間。
      第j行的3個(gè)數(shù)字依次表示學(xué)號(hào)為j-1的學(xué)生的語文、數(shù)學(xué)、英語的成績(jī)。
      每個(gè)學(xué)生的學(xué)號(hào)按照輸入順序編號(hào)為1~n(恰好是輸入數(shù)據(jù)的行號(hào)減1)。
      所給的數(shù)據(jù)都是正確的,不必檢驗(yàn)。
      

      輸出格式:共5行,每行是兩個(gè)用空格隔開的正整數(shù),依次表示前5名學(xué)生的學(xué)號(hào)和總分。

      輸入樣例:

      6
      90 67 80
      87 66 91
      78 89 91
      88 99 77
      67 89 64
      78 89 98
      

      輸出樣例:

      6 265
      4 264
      3 258
      2 244
      1 237
      

      題解:

      #include<iostream>
      #include<algorithm>
      using namespace std;
      const int N=310;
      struct T{
          int s1,s2,s3;//語文,數(shù)學(xué),英語成績(jī)
          int id;   //學(xué)號(hào) 
          int sum(){//總分 
              return s1+s2+s3;
          } 
      }stu[N]; 
      
      bool cmp(T a, T b){
          if(a.sum()!=b.sum()) return a.sum()>b.sum();//總分降序排列 
          if(a.s1!=b.s1) return a.s1>b.s1;//語文成績(jī)降序排列 
          return a.id<b.id;//學(xué)號(hào)升序排列 
      } 
      
      int main() {
          int n; cin>>n;
          for(int i=0; i<n; i++){
              cin>>stu[i].s1>>stu[i].s2>>stu[i].s3;
              stu[i].id = i+1;//學(xué)號(hào) 
          } 
          sort(stu, stu+n, cmp);//自定義排序 
          for(int i=0; i<5; i++){//前5名 
              cout<<stu[i].id<<" "<<stu[i].sum()<<endl;
          } return 0;
      }
      
      

      7. P1104 生日

      【題目描述】cjf 君想調(diào)查學(xué)校OI組每個(gè)同學(xué)的生日,并按照從大到小的順序排序。

      輸入格式:有2行,第1行為OI組總?cè)藬?shù)n,第2行至第n+1行分別是每人的姓名s、出生年y、月m、日d

      輸出格式:有n行,即n個(gè)生日從大到小同學(xué)的姓名(如果有兩個(gè)同學(xué)生日相同,輸入靠后的同學(xué)先輸出)

      輸入樣例:

      3
      Yangchu 1992 4 23
      Qiujingya 1993 10 13
      Luowen 1991 8 1
      

      輸出樣例:

      Luowen
      Yangchu
      Qiujingya
      

      數(shù)據(jù)范圍:1<n<100,length(s)<20

      題解:

      #include<iostream>
      #include<algorithm>
      using namespace std;
      struct T{
          string name;
          int y,m,d;//year,month,day
          int id;   //輸入先后順序 
      }stu[110];
      
      bool cmp(T a, T b){
          if(a.y!=b.y) return a.y<b.y;//如果年份不同,按年份升序排序 
          if(a.m!=b.y) return a.m<b.m;//如果月份不同,按月份升序排序 
          if(a.d!=b.d) return a.d<b.d;//如果天數(shù)不同,按天數(shù)升序排序 
          return a.id>b.id; //按輸入順序,逆序排序 
      } 
      int main() {
          int n; cin>>n;
          for(int i=0; i<n; i++){
              cin>>stu[i].name>>stu[i].y>>stu[i].m>>stu[i].d;
              stu[i].id = i; 
          }
          sort(stu, stu+n, cmp);//自定義排序規(guī)則 
          for(int i=0; i<n; i++){
              cout<<stu[i].name<<endl;
          } return 0;
      }
      

      8. P1068 [NOIP2009 普及組] 分?jǐn)?shù)線劃定

      【題目描述】世博會(huì)志愿者的選拔工作正在 A 市如火如荼的進(jìn)行。為了選拔最合適的人才,AA市對(duì)所有報(bào)名的選手進(jìn)行了筆試,筆試分?jǐn)?shù)達(dá)到面試分?jǐn)?shù)線的選手方可進(jìn)入面試。面試分?jǐn)?shù)線根據(jù)計(jì)劃錄取人數(shù)的150%劃定,即如果計(jì)劃錄取m名志愿者,則面試分?jǐn)?shù)線為排名第m×150%(向下取整)名的選手的分?jǐn)?shù),而最終進(jìn)入面試的選手為筆試成績(jī)不低于面試分?jǐn)?shù)線的所有選手。

      現(xiàn)在就請(qǐng)你編寫程序劃定面試分?jǐn)?shù)線,并輸出所有進(jìn)入面試的選手的報(bào)名號(hào)和筆試成績(jī)。

      輸入格式:
      第一行,兩個(gè)整數(shù) n,m(5≤n≤5000,3≤m≤n),中間用一個(gè)空格隔開,其中 n表示報(bào)名參加筆試的選手總數(shù),m表示計(jì)劃錄取的志愿者人數(shù)。輸入數(shù)據(jù)保證 m×150%向下取整后小于等于 n。

      第二行到第 n+1 行,每行包括兩個(gè)整數(shù),中間用一個(gè)空格隔開,分別是選手的報(bào)名號(hào) k(1000≤k≤9999)和該選手的筆試成績(jī) s(1≤s≤100)。數(shù)據(jù)保證選手的報(bào)名號(hào)各不相同。

      輸出格式:
      第一行,有2個(gè)整數(shù),用一個(gè)空格隔開,第一個(gè)整數(shù)表示面試分?jǐn)?shù)線;第二個(gè)整數(shù)為進(jìn)入面試的選手的實(shí)際人數(shù)。

      從第二行開始,每行包含2個(gè)整數(shù),中間用一個(gè)空格隔開,分別表示進(jìn)入面試的選手的報(bào)名號(hào)和筆試成績(jī),按照筆試成績(jī)從高到低輸出,如果成績(jī)相同,則按報(bào)名號(hào)由小到大的順序輸出。

      輸入樣例:

      6 3
      1000 90
      3239 88
      2390 95
      7231 84
      1005 95 
      1001 88
      

      輸出樣例:

      88 5
      1005 95
      2390 95
      1000 90
      1001 88 
      3239 88 
      

      題解:

      #include<bits/stdc++.h>
      using namespace std;
      const int N=1e4;
      struct T{
          int k,s;
      }stu[N];
      
      bool cmp(T a, T b){
          if(a.s!=b.s) return a.s>b.s;//按成績(jī)降序排列 
          return a.k<b.k;//按成績(jī)升序排列 
      }
      
      int main(){
          int n,m; cin>>n>>m;
          int num=floor(m*1.5);//參與面試的人數(shù) 
          for(int i=1; i<=n; i++){
              cin>>stu[i].k>>stu[i].s;
          }
          sort(stu+1, stu+n+1, cmp);
          int score=0, ans=0;//最后進(jìn)入面試的分?jǐn)?shù),人數(shù) 
          for(int i=1; i<=n; i++){
              if(i<=num || stu[i].s==score){
                  ans++;
                  score=stu[i].s;
              }else{
                  break;
              }
          }
          cout<<score<<" "<<ans<<endl;
          for(int i=1; i<=ans; i++){
              cout<<stu[i].k<<" "<<stu[i].s<<endl;
          }return 0;
      }
      

      9. P1051 [NOIP2005 提高組] 誰拿了最多獎(jiǎng)學(xué)金

      【題目描述】 某校的慣例是在每學(xué)期的期末考試之后發(fā)放獎(jiǎng)學(xué)金。發(fā)放的獎(jiǎng)學(xué)金共有五種,獲取的條件各自不同:

      院士獎(jiǎng)學(xué)金,每人8000元,期末平均成績(jī)高于80分(>80),并且在本學(xué)期內(nèi)發(fā)表1篇或1篇以上論文的學(xué)生均可獲得;
      五四獎(jiǎng)學(xué)金,每人4000元,期末平均成績(jī)高于85分(>85),并且班級(jí)評(píng)議成績(jī)高于80分(>80)的學(xué)生均可獲得;
      成績(jī)優(yōu)秀獎(jiǎng),每人2000元,期末平均成績(jī)高于90分(>90)的學(xué)生均可獲得;
      西部獎(jiǎng)學(xué)金,每人1000元,期末平均成績(jī)高于85分(>85)的西部省份學(xué)生均可獲得;
      班級(jí)貢獻(xiàn)獎(jiǎng),每人850元,班級(jí)評(píng)議成績(jī)高于80分(>80)的學(xué)生干部均可獲得;

      只要符合條件就可以得獎(jiǎng),每項(xiàng)獎(jiǎng)學(xué)金的獲獎(jiǎng)人數(shù)沒有限制,每名學(xué)生也可以同時(shí)獲得多項(xiàng)獎(jiǎng)學(xué)金。例如姚林的期末平均成績(jī)是87分,班級(jí)評(píng)議成績(jī)82分,同時(shí)他還是一位學(xué)生干部,那么他可以同時(shí)獲得五四獎(jiǎng)學(xué)金和班級(jí)貢獻(xiàn)獎(jiǎng),獎(jiǎng)金總數(shù)是4850元。

      現(xiàn)在給出若干學(xué)生的相關(guān)數(shù)據(jù),請(qǐng)計(jì)算哪些同學(xué)獲得的獎(jiǎng)金總數(shù)最高(假設(shè)總有同學(xué)能滿足獲得獎(jiǎng)學(xué)金的條件)。

      輸入格式:
      第一行是1個(gè)整數(shù)N(1≤N≤100),表示學(xué)生的總數(shù)。

      接下來的NN行每行是一位學(xué)生的數(shù)據(jù),從左向右依次是姓名,期末平均成績(jī),班級(jí)評(píng)議成績(jī),是否是學(xué)生干部,是否是西部省份學(xué)生,以及發(fā)表的論文數(shù)。姓名是由大小寫英文字母組成的長(zhǎng)度不超過20的字符串(不含空格);期末平均成績(jī)和班級(jí)評(píng)議成績(jī)都是0到100之間的整數(shù)(包括0和100);是否是學(xué)生干部和是否是西部省份學(xué)生分別用1個(gè)字符表示,Y表示是,N表示不是;發(fā)表的論文數(shù)是0到1010的整數(shù)(包括0和10)。每?jī)蓚€(gè)相鄰數(shù)據(jù)項(xiàng)之間用一個(gè)空格分隔。

      輸出格式:
      包括3行,第1行是獲得最多獎(jiǎng)金的學(xué)生的姓名。
      第2行是這名學(xué)生獲得的獎(jiǎng)金總數(shù)。如果有兩位或兩位以上的學(xué)生獲得的獎(jiǎng)金最多,輸出他們之中在輸入文件中出現(xiàn)最早的學(xué)生的姓名。
      第3行是這N個(gè)學(xué)生獲得的獎(jiǎng)學(xué)金的總數(shù)。

      輸入樣例:

      4
      YaoLin 87 82 Y N 0
      ChenRuiyi 88 78 N Y 1
      LiXin 92 88 N N 0
      ZhangQin 83 87 Y N 1
      

      輸出樣例:

      ChenRuiyi
      9000
      28700
      

      題解:這道題就是使用結(jié)構(gòu)體來排序,并且多了一下判斷條件,需要注意細(xì)節(jié)

      #include<bits/stdc++.h>
      using namespace std;
      const int N=1e2+5; //定義常量N
      struct T{
          int id;
          string name;
          int score1,score2,num;
          char flag1,flag2;
          int money(){
              int sum=0;
              if(score1>80 && num>=1) sum+=8000;
              if(score1>85  && score2>80) sum+= 4000;
              if(score1>90) sum += 2000;
              if(score1>85  && flag2=='Y') sum += 1000;
              if(score2>80 && flag1=='Y') sum += 850;
              return sum;
          }
      }stu[N];
       
      bool cmp(T a, T b){//自定義排序規(guī)則
          if(a.money() !=b.money()){
              return a.money() > b.money();//獲得獎(jiǎng)學(xué)金最多的同學(xué)在前
          }
          return a.id < b.id;//按學(xué)號(hào)升序排序
      }
      
      int main(){
          int n; cin>>n;
          for(int i=0; i<n; i++){
              cin>>stu[i].name>>stu[i].score1
                  >>stu[i].score2>>stu[i].flag1
                  >>stu[i].flag2>>stu[i].num;
              stu[i].id = i;
          }
          sort(stu, stu+n, cmp);//自定義排序,注意下標(biāo)
          int sum=0;
          for(int i=0; i<n; i++){
              sum += stu[i].money();//獎(jiǎng)學(xué)金總數(shù)
          }
          cout<<stu[0].name<<endl<<stu[0].money()<<endl;
          cout<<sum<<endl; return 0;
      }
      
      posted @ 2021-08-01 07:20  HelloHeBin  閱讀(602)  評(píng)論(0)    收藏  舉報(bào)
      主站蜘蛛池模板: 樱花草视频www日本韩国| 色偷偷www.8888在线观看| 日本高清视频网站www| 中文字幕国产精品日韩| 90后极品粉嫩小泬20p| 精品久久久久久无码免费| 好吊视频在线一区二区三区| 国产不卡精品视频男人的天堂| 丰满人妻被黑人猛烈进入| 人人妻人人插视频| 九九热在线视频只有精品| 亚洲精品国产一二三区| 老司机精品成人无码AV| 久久99精品国产麻豆宅宅| 综合久久婷婷综合久久| 国产精品久久久久鬼色| 亚洲 丝袜 另类 校园 欧美| 国产精品女人毛片在线看| 颍上县| 日本一区二区不卡精品| 国产破外女出血视频| 2019亚洲午夜无码天堂| 亚洲国产精品高清久久久| 日韩有码中文字幕av| 日本一道一区二区视频| 国产香蕉久久精品综合网| 精品欧美一区二区三区久久久| 亚洲精品一区二区制服| av综合亚洲一区二区| 色老头亚洲成人免费影院| 色偷偷女人的天堂亚洲网| 欧美成人精品手机在线| 苍溪县| 亚洲精品国产综合久久一线| 三男一女吃奶添下面视频| 欧美乱妇高清无乱码免费| 欧美丰满熟妇乱XXXXX网站| 色狠狠色婷婷丁香五月| 伊人久久大香线蕉av色婷婷色| 国内精品久久久久精免费| 九九热免费在线播放视频|