6 条题解

  • 2
    @ 2023-8-6 15:20:23
    #include<bits/stdc++.h>
    using namespace std;
    string maxname = "NaN";
    int n = 99999, sumjj = 0, maxjxj = -999999;
    struct student
    {
        string name;
        int ends, cls, lunwen;
        char ganbu, west;
        int jxj;
    }a[1005];
    int main()
    {
        cin >> n;
        for(int i = 1; i <= n; i++) cin >> a[i].name >> a[i].ends >> a[i].cls >> a[i].ganbu >> a[i].west >> a[i].lunwen;
        for(int i = 1; i <= n; i++)
        {
            if(a[i].ends > 80 && a[i].lunwen >= 1)
                a[i].jxj += 8000;
            if(a[i].ends > 85 && a[i].cls > 80)
                a[i].jxj += 4000;
            if(a[i].ends > 90)
                a[i].jxj += 2000;
            if(a[i].ends > 85 && a[i].west == 'Y')
                a[i].jxj += 1000;
            if(a[i].cls > 80 && a[i].ganbu == 'Y')
                a[i].jxj += 850;
            //---------------------------------------------------
            if(a[i].jxj > maxjxj)
            {
                maxjxj = a[i].jxj;
                maxname = a[i].name;
            }
            sumjj += a[i].jxj;
        }
        cout << maxname << endl << maxjxj << endl << sumjj << endl;
    }
    
    • 2
      @ 2023-7-26 13:06:06

      解析

      按照题意,对结构体进行操作

      题解

      #include <iostream>
      using namespace std;
      struct st
      {
          string name;//姓名 
          int qm, bj;//期末、班级评议 
          char gb, west;//干部、西部 
          int lw;//论文 
      } s[101]; //s[0]~s[100] 都是一个 st 类型的变量 
      
      int main()
      {
          int n, maxi, maxx = 0, total = 0;
          cin >> n;
          for (int i = 1; i <= n; i++)
          {
              int sum = 0;
              cin >> s[i].name >> s[i].qm >> s[i].bj >> s[i].gb >> s[i].west >> s[i].lw;
              if (s[i].qm > 80 && s[i].lw >= 1)
                  sum += 8000;
              if (s[i].qm > 85 && s[i].bj > 80)
                  sum += 4000;
              if (s[i].qm > 90)
                  sum += 2000;
              if (s[i].west == 'Y' && s[i].qm > 85)
                  sum += 1000;
              if (s[i].gb == 'Y' && s[i].bj > 80)
                  sum += 850;
              if (maxx < sum)
                  maxx = sum, maxi = i;
              total += sum;
          }
          cout << s[maxi].name << endl
               << maxx << endl
               << total;
          return 0;
      }
      
      
      • 1
        @ 2023-7-27 16:40:31

        压缩流yasuo

        对了,题解有点多

        为了观赏性,就写次using namespace std;请见谅(绝不是懒)

        #include <iostream>
        using namespace std;
        struct stud{
            string name;
            int qmcj,bjyp,lw,yuan;
            char gb,xstu;
        }stu[105],maxn;
        int main(){
            int q,sum=0;cin>>q;
            for(int i=0;i<q;i++){
                cin>>stu[i].name>>stu[i].qmcj>>stu[i].bjyp>>stu[i].gb>>stu[i].xstu>>stu[i].lw;}
            for(int i=0;i<q;i++){
                if(stu[i].qmcj>80&&stu[i].lw>=1) stu[i].yuan+=8000;
                if(stu[i].qmcj>85&&stu[i].bjyp>80) stu[i].yuan+=4000;
                if(stu[i].qmcj>90) stu[i].yuan+=2000;
                if(stu[i].qmcj>85&&stu[i].xstu=='Y') stu[i].yuan+=1000;
                if(stu[i].bjyp>80&&stu[i].gb=='Y') stu[i].yuan+=850;
                if(stu[i].yuan>maxn.yuan) maxn=stu[i];
                sum+=stu[i].yuan;}
            cout<<maxn.name<<endl<<maxn.yuan<<endl<<sum;
            return 0;}
        
        • 1
          @ 2023-7-26 21:18:07

          题解,但是有亿点多

          首先,因为这道题会给多行数据,且每行数据的每一个数据类型不同,所以我们考虑用结构体解题(因为要求最大值,所以还需要创建一个类型为结构体类型名的maxn这个变量)

          struct student
          {
              string name;
              int qimo,banji,lunwen,money;
              char ganbu,xibu;
          };
          student s[105],maxn;
          

          接下来,根据题目给的条件,写一个用来计算每个同学可以获得的奖学金的函数(主要是方便看和检查,直接把函数的内容放到主函数里也行)

          int get(student a)
          {
              int m = 0;
              if(a.qimo > 80 && a.lunwen >= 1)//院士
                  m += 8000;
              if(a.qimo > 85 && a.banji > 80)//五四
                  m += 4000;
              if(a.qimo > 90)//成绩
                  m += 2000;
              if(a.qimo > 85 && a.xibu == 'Y')//西部
                  m += 1000;
              if(a.banji > 80 && a.ganbu == 'Y')//班级
                  m += 850;
              return m;
          }
          

          最后,遍历s,如果s[i].money大于maxn.money的话,那么把maxn设为s[i](别忘了求和),然后输出

          #include <iostream>
          #include <string>
          using namespace std;
          
          struct student
          {
              string name;
              int qimo,banji,lunwen,money;
              char ganbu,xibu;
          };
          student s[105],maxn;
          
          int get(student a)
          {
              int m = 0;
              if(a.qimo > 80 && a.lunwen >= 1)
                  m += 8000;
              if(a.qimo > 85 && a.banji > 80)
                  m += 4000;
              if(a.qimo > 90)
                  m += 2000;
              if(a.qimo > 85 && a.xibu == 'Y')
                  m += 1000;
              if(a.banji > 80 && a.ganbu == 'Y')
                  m += 850;
              return m;
          }
          
          int main()
          {
              int n,sum = 0;
              cin >> n;
              for(int i = 0;i < n;i++)
              {
                  cin >> s[i].name >> s[i].qimo >> s[i].banji >> s[i].ganbu >> s[i].xibu >> s[i].lunwen;
                  s[i].money = get(s[i]);
              }
              for(int i = 0;i < n;i++)
              {
                  if(s[i].money > maxn.money)
                      maxn = s[i];
                  sum += s[i].money;
              }
              cout << maxn.name << endl << maxn.money << endl << sum;
              return 0;
          }
          
          • 1
            @ 2023-7-26 17:48:26
            #include<iostream>
            #include<algorithm>
            using namespace std;
            #define si s[i]//s[i]这么麻烦,为什么不用si代替呢
            struct student
            {
                string name;
                int eresult;
                int cresult;
                char ganbu;
                char west;
                int lun;
                int count;
                int money;
            }s[105];
            bool cmp(student x,student y)
            {
                if(x.money!=y.money)
                    return x.money>y.money;
                else
                    return x.count<y.count;
            }
            int main()
            {
                int n,sum=0;
                cin>>n;
                for(int i=0;i<=n;i++)
                {
                    cin>>si.name>>si.eresult>>si.cresult>>si.ganbu>>si.west>>si.lun;
                    si.count=i;
                    if(si.eresult>80&&si.lun>=1)
                        si.money+=8000;
                    if(si.eresult>85&&si.cresult>80)
                        si.money+=4000;
                    if(si.eresult>90)
                        si.money+=2000;
                    if(si.eresult>85&&si.west=='Y')
                        si.money+=1000;
                    if(si.cresult>80&&si.ganbu=='Y')
                        si.money+=850;
                    sum+=si.money;
                }
                sort(s+1,s+n+1,cmp);
                cout<<s[1].name<<endl;
                cout<<s[1].money<<endl;
                cout<<sum;
            }
            

            全服最长!!

            • 0
              @ 2023-7-26 17:47:46

              题解(可能有点复杂)

              首先定义结构体stu

              struct stu
              {
                  string name;
                  int mark_average,mark_class;
                  char wkr,W_pr;//班干部,西部省份
                  int art_cnt;
                  int total,id;//总奖学金与输入顺序
              } s[101];
              

              然后声明一系列函数判断某学生是否能获得各种奖学金

              int YS_Award(stu a)//院士奖
              {
                  if(a.mark_average>80 && a.art_cnt >= 1)
                      return 8000;
                  return 0;
              }
              
              int WuSi_Award(stu a)//五四奖
              {
                  if(a.mark_average > 85 && a.mark_class > 80)
                      return 4000;
                  return 0;
              }
              
              int GM_Award(stu a)//优秀奖
              {
                  if(a.mark_average > 90)
                      return 2000;
                  return 0;
              }
              
              int W_pr_Award(stu a)//西部奖
              {
                  if(a.mark_average > 85 && a.W_pr == 'Y')
                      return 1000;
                  return 0;
              }
              
              int GX_Award(stu a)//贡献奖
              {
                  if(a.mark_class > 80 && a.wkr == 'Y')
                      return 850;
                  return 0;
              }
              

              声明排序条件 依题意 奖学金多的在前,奖学金一样的先输入的在前(id小的)

              bool cmp(stu x,stu y)
              {
                  if(x.total == y.total)
                      return x.id < y.id;
                  return x.total > y.total;
              }
              

              最后在主函数里完成输入处理输出

              int main()
              {
                  //freopen("scholar.in","r",stdin);
                  //freopen("scholar.out","w",stdout);
                  int n;
                  int sum = 0;
                  cin >> n;
                  for(int i = 0; i < n; i++)
                  {
                      cin >> s[i].name >> s[i].mark_average >> s[i].mark_class >> s[i].wkr >> s[i].W_pr >> s[i].art_cnt;
                      s[i].id = i;
                      s[i].total = (YS_Award(s[i]) + WuSi_Award(s[i]) + GM_Award(s[i]) + W_pr_Award(s[i]) + GX_Award(s[i]));
                      sum += s[i].total;
                  }
                  sort(s,s+n,cmp);
                  cout << s[0].name <<endl;
                  cout << s[0].total <<endl;
                  cout << sum << endl;
                  return 0;
              }
              

              over.

              • 1

              信息

              ID
              339
              时间
              1000ms
              内存
              125MiB
              难度
              7
              标签
              递交数
              1496
              已通过
              388
              上传者