排序训练5, B-2

Excel可以对一组纪录按任意指定列排序。现请你编写程序实现类似功能。

Input

测试输入包含若干测试用例。每个测试用例的第1行包含两个整数 N (<=100000) 和 C,其中 N 是纪录的条数,C 是指定排序的列号。以下有 N 
行,每行包含一条学生纪录。每条学生纪录由学号(6位数字,同组测试中没有重复的学号)、姓名(不超过8位且不包含空格的字符串)、成绩(闭区间[0, 100]内的整数)组成,每个项目间用1个空格隔开。当读到 N=0 时,全部输入结束,相应的结果不要输出。

Output

对每个测试用例,首先输出1行“Case i:”,其中 i 是测试用例的编号(从1开始)。随后在 N 行中输出按要求排序后的结果,即:当 C=1 时,按学号递增排序;当 C=2时,按姓名的非递减字典序排序;当 C=3 
时,按成绩的非递减排序。当若干学生具有相同姓名或者相同成绩时,则按他们的学号递增排序。

Sample Input

3 1
000007 James 85
000010 Amy 90
000001 Zoe 60
4 2
000007 James 85
000010 Amy 90
000001 Zoe 60
000002 James 98
4 3
000007 James 85
000010 Amy 90
000001 Zoe 60
000002 James 90
0 0

Sample Output

Case 1:
000001 Zoe 60
000007 James 85
000010 Amy 90
Case 2:
000010 Amy 90
000002 James 98
000007 James 85
000001 Zoe 60
Case 3:
000001 Zoe 60
000007 James 85
000002 James 90
000010 Amy 90

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
struct stu //定义结构体
{
int z;
char x[7],y[9];
}st[100000];
bool cam1(stu a,stu b) //对学号排序
{
return strcmp(a.x,b.x)<0;
}
bool cam2(stu a,stu b) //对姓名排序
{
if(strcmp(a.y,b.y)==0)
return strcmp(a.x,b.x)<0;
return strcmp(a.y,b.y)<0;
}
bool cam3(stu a,stu b) //对成绩排序
{
if(a.z==b.z)
return strcmp(a.x,b.x)<0;
return a.z<b.z;
}
int main()
{
int n,c,d,i,t,cas=1,sum;
while(~scanf("%d%d",&n,&c))
{
i=0;t=n;sum=0;
while(n--)
{
scanf("%s%s%d",&st[i].x,&st[i].y,&st[i].z);
if(strlen(st[i].x)<=6&&strlen(st[i].y)<=8&&0<=st[i].z&&st[i].z<=100) //判断输入值是否满足需求
sum++;
i++;
}
if(sum==i&&t!=0&&0<c<4)
{
sort(st,st+t,cam1);
for(d=0,i=0;i<t-1;i++)
if(strcmp(st[i].x,st[i+1].x)==0) //排除学号相同的错误情况。
d=1;
if(d==0)
{
if(c==2)
{
sort(st,st+t,cam2);
}
if(c==3)
{
sort(st,st+t,cam3);
}
printf("Case %d:\n",cas++);
for(i=0;i<t;i++)
printf("%s %s %d\n",st[i].x,st[i].y,st[i].z);
}
}
}
return 0;
}

心得:对于结构体的更进一步熟悉和使用,错误的很多次让我更加注意题目所给出的条件。

时间: 2024-10-19 23:44:48

排序训练5, B-2的相关文章

排序训练5 D-4

“今年暑假不AC?” “是的.” “那你干什么呢?” “看世界杯呀,笨蛋!” “@#$%^&*%...” 确实如此,世界杯来了,球迷的节日也来了,估计很多ACMer也会抛开电脑,奔向电视了. 作为球迷,一定想看尽量多的完整的比赛,当然,作为新时代的好青年,你一定还会看一些其它的节目,比如新闻联播(永远不要忘记关心国家大事).非常6+7.超级女生,以及王小丫的<开心辞典>等等,假设你已经知道了所有你喜欢看的电视节目的转播时间表,你会合理安排吗?(目标是能看尽量多的完整节目) Input

国美深度学习初体验,开启社交电商的智能时代!

本周五(2017 年 7 月 21 日),由 51CTO 主办的 WOTI2017  全球创新技术峰会将于北京富力万丽酒店举行,此次峰会设有全天的巅峰论坛,及深度学习.人机交互和智+应用等分论坛. 国美大数据中心副总监杨骥,将出席深度学习分论坛,做主题为"深度学习开启社交电商智能时代"的演讲.在会前交流中,杨骥介绍了此次演讲的部分技术干货,让我们抢先看. 人工智能.机器学习与深度学习的关系 从冯诺依曼体系结构的提出开始,人类使用计算机就有了智能化的诉求.也就是使用计算机或机器人能够帮助

蓝桥杯 算法训练 最小乘积(基本型) (水题,排序)

算法训练 最小乘积(基本型) 时间限制:1.0s   内存限制:512.0MB 问题描述 给两组数,各n个. 请调整每组数的排列顺序,使得两组数据相同下标元素对应相乘,然后相加的和最小.要求程序输出这个最小值. 例如两组数分别为:1 3 -5和-2 4 1 那么对应乘积取和的最小值应为: (-5) * 4 + 3 * (-2) + 1 * 1 = -25 输入格式 第一个行一个数T表示数据组数.后面每组数据,先读入一个n,接下来两行每行n个数,每个数的绝对值小于等于1000. n<=8,T<=

acm集训训练赛B题【排序+模拟】

一.原题 Description Being a programmer, you like arrays a lot. For your birthday, your friends have given you an array a consisting of ndistinct integers. Unfortunately, the size of a is too small. You want a bigger array! Your friends agree to give you

20151230训练题解(最短路+拓扑排序)

http://acm.hust.edu.cn/vjudge/contest/view.action?cid=103223#problem/B 这道题用经典的dijsktra算法,大概思路就是用dist[x]存储x到已经确定集合的最短路,n次循环到这个这个最小值,然后更新其他点到新集合的最短路即对应的dist[] 1 #include <iostream> 2 #include <cstring> 3 #include <cstdio> 4 #include <al

【极角排序+双指针线性扫】2017多校训练七 HDU 6127 Hard challenge

acm.hdu.edu.cn/showproblem.php?pid=6127 [题意] 给定平面直角坐标系中的n个点,这n个点每个点都有一个点权 这n个点两两可以连乘一条线段,定义每条线段的权值为线段两端点点权的乘积 现在要过原点作一条直线,要求这条直线不经过任意一个给定的点 在所有n个点两两连成的线段中,计算与这条直线有交点的线段的权值和 最大化这个权值和并输出 题目保证,给定的n个点不重合且任意两个点的连线不经过原点 [思路] 一条经过原点的直线把n个点分成两个半平面A,B 假设A中的点权

算法训练 排序

时间限制:1.0s   内存限制:512.0MB 问题描述 编写一个程序,输入3个整数,然后程序将对这三个整数按照从大到小进行排列. 输入格式:输入只有一行,即三个整数,中间用空格隔开. 输出格式:输出只有一行,即排序后的结果. 输入输出样例 样例输入 9 2 30 样例输出 30 9 2 import java.util.Arrays; import java.util.Scanner; public class Main { public static void main(String []

华为训练题:中级——字符串排序(查找)

编写一个程序,将输入字符串中的字符按如下规则排序. 规则1:英文字母从A到Z排列,不区分大小写. 如,输入:Type 输出:epTy 规则2:同一个英文字母的大小写同时存在时,按照输入顺序排列. 如,输入:BabA 输出:aABb 规则3:非英文字母的其它字符保持原来的位置. 如,输入:By?e 输出:Be?y 样例: 输入: A Famous Saying: Much Ado About Nothing(2012/8). 输出: A aaAAbc dFgghh: iimM nNn oooos 

入门训练 数列排序

-------------------------------------------------------------------------------------------------------- 这道题是对排序的考察 -------------------------------------------------------------------------------------------------------- 算法一(冒泡排序) 相邻两个比较,把较大的往上替换循环往复