结构体模板及应用*
在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) 收藏 举报
浙公网安备 33010602011771号