结构体模板及应用*

在C++中结构体排序是非常常见的掌握它非常重要,当然结构体并非特别难。

struct<变量名字>

{
      声名变量如(int)

      等类型变量。

{

举个例子

以下为原创题

 

【题面描述】
练习了这么久的结构体排序,今天终于可以大展身手了!为了保证人人都可 以过题,善良的万老师决定将此题设置为送分题,没写对的奖励变态辣曹氏鸭脖, 嘻嘻。那么请听题目: 假设今天有N 个人参加此次测试,且本次测试有K 道题,现给出每个人每道 题的分数。请按照总分从高到低的顺序输出,若总分相同,则名字字典序小的先 输出,保证每个人的名字都不相同。

【输入格式】
输入文件名为 struct.in。 输入文件第一行为两个正整数 K N, ,分别表示参加测试的人数以及测试的 题目数。 紧接着有N 行,每行首先有一个字符串,表示人名。在人名后有K 个数,分 别表示每道题的分数。

【输出格式】
输入文件名为 struct.out。 按照题目描述的顺序输出,要求输出人名以及该人的总分,二者间有个空格。

【样例说明】
struct.in struct.out

输入:

4   5

Alice 20 100 40 100 50

Bob  10 0 30 50 60

Cena  40 40 20 20 30

Deny 100 100 80 50 10

输出

 Deny 340 

 Alice 310

 Bob 150

 Cena 150

不难得出,四个人的成绩分别为:310,150,150,340。其中 Cena 的成绩 与 Bob 成绩相同,但是由于“Bob”字典序高于“Cena”,则优先排序“Bob”。

题解

#include <iostream>
#include <string>
#include <cstring>
#include <algorithm>
#include <cstdio>
using namespace std;
struct name
{
     string s;      //声名字符串用来存储学生名字。
     int sum;      //sum用来存储学生的总成绩。
}stu[1002];      //我们先用定义一个结构体struct
bool comp(name a,name b)    //bool非常重要它可以帮助我们完成判断**且将前面的struct声名的name变量放入bool里进行判断

{
     if(a.sum!=b.sum)   //开始判断如果a的成绩不等于b的成绩满足条件继续读入程序
     {
           return a.sum>b.sum;   //那么返回大的成绩在前面进行排序
     }
     else
     {
           return a.s<b.s;     //如果成绩相同的话,按照题目所说的字典序排名次。及a在b的前面。
     }
}//以上为子函数是做为后面主函数的工具的
int main()
{
         freopen("struct.in","r",stdin);
         freopen("struct.out","w",stdout); //此两行代码和本题无关
         int n,k,a;
         cin>>n>>k;
         for(int i=1;i<=n;i++)//输入
         {
               cin>>stu[i].s;//调用前面的子函数,s为名字
               for(int j=1;j<=k;j++)//输入题数
               {
                     cin>>a;//输入每题的分数
                     stu[i].sum+=a;//调用子函数且算出总分
              }
         }
         sort(stu+1,stu+n+1,comp);//用sort函数进行排序
         for(int i=1;i<=n;i++)
         {
                     cout<<stu[i].s<<" "<<stu[i].sum<<endl;//输出名字及总分
         }
         fclose(stdin);
         fclose(stdout); //此两行代码和本题无关
         return 0;
}

posted on 2018-07-10 23:04  kuangkuang'  阅读(441)  评论(1)    收藏  举报

导航