高级启示者
1097 作息时间
经验值:800 时间限制:1000毫秒
合肥市第27届信息学竞赛
不许抄袭,一旦发现,直接清空经验!
题目描述 Description
小K告诉了小新自己一天的安排:“8:30:30去超市”、“9:10:10去朋友家”、“10:20:10去…”、…。
小新看着复杂的安排表,晕了头,因为时间太混乱了,小K没有按照时间先后告诉他。于是他需要你帮助他把这些时间按照先后顺序输出。
输入描述 Input Description
第一行一个整数N表示有多少个时间;
之后N行,每行空格隔开3个数字,依次分别表示时,分,秒。
【数据范围】
对于70%的数据 N <= 1000;
对于100%的数据 N <= 15000;
保证输入格式为正常时间表示法,即时,分,秒都在[0,59]的范围内。
输出描述 Output Description
输出有N行,按照时间先后顺序输出所有的时间,输出的时候依然是每行3个空格隔开的数字,分别表示时,分,秒。
如果有2个时间是相同的,你仍然需要输出两次。
样例输入 Sample Input
4 3 22 21 3 21 22 3 22 22 3 21 21
样例输出 Sample Output
3 21 21 3 21 22 3 22 21 3 22 22
WA0分
#include<bits/stdc++.h>
using namespace std;
long long a[90000],b[90000],c[90000],n;
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i]>>b[i]>>c[i];
}
for(int i=1;i<=n;i++){
for(int j=i+1;j<=n;j++){
if(a[i]+b[i]+c[i]>a[j]+b[j]+c[j]){
swap(a[i],a[j]);
swap(b[i],b[j]);
swap(c[i],c[j]);
}
}
}
for(int i=1;i<=n;i++){
cout<<a[i]<<" "<<b[i]<<" "<<c[i]<<endl;
}
return 0;
}
初级天翼
首先我们看题目的知识点,是结构体,所以我们得出:
struct f{
int s,f,m;//题目要求输入三个数字,分别是时,分,秒,都是整型变量,所以用int
}a[15005];//n的范围是对于100%的数据 N <= 15000(70%的数据可以不看),所以数组定义的稍大,定义个15005即可
再看主函数,他要先输入一个n那就定义一个n:
int n;
cin>>n;
需要输入多组数据的话要用循环:
for(int i=1;i<=n;i++){
cin>>a[i].s>>a[i].f>>a[i].m;//每次输入一个时,一个分,一个秒;
}
接着我们要排序,排序用sort函数,也就是:
sort(a+1,a+1+n,cmp);
cmp没有定义所以自定义一个cmp函数:
bool cmp(f a,f b){
if(a.s!=b.s){//先看时,时不相等就从小到大排序
return a.s<b.s;
}
else if(a.f!=b.f){//如果时不相等,再看分,分不相等就从小到大排序
return a.f<b.f;
}
else if(a.m!=b.m){如果分也不相等,再看秒,秒不相等就从小到大排序
return a.m<b.m;
}
}//写主函数外;
cmp自定义函数写好了,再返回到主函数刚刚排序的地方,接下来按照排完序的输出就行;
for(int i=1;i<=n;i++){//输出n组数据用for循环
cout<<a[i].s<<" "<<a[i].f<<" "<<a[i].m<<endl;//每次输出一个时,一个分,一个秒;
}
按照以上写法写即可AC,打字不易,望采纳
吕梓瑜在2021-07-29 09:59:09追加了内容
嗷呜~
新手天翼
这道题可以定义结构体:
struct p{
int s,f,m;
}a[15009];
然后sort排序
bool函数:
bool cmp(p x,p y){
if(x.s!=y.s){
return x.s<y.s;
}
if(x.f!=y.f){
return x.f<y.f;
}
if(x.m!=y.m){
return x.m<y.m;
}
}
剩下的就没问题啦!
中级天翼
核心:
cmp函数:
如果(x.s!=y.s) 返回 x.s<y.s;
如果(x.f!=y.f) 返回 x.f<y.f;
返回 x.m<y.m;
main函数:
输入>>n;
循环(定义 i=1;i<=n;i++)
输入>>a[i].s>>a[i].f>>a[i].m;
排序(a+1,a+1+n,cmp);
循环(定义 i=1;i<=n;i++)
输出<<a[i].s<<" "<<a[i].f<<" "<<a[i].m<<endl;
初级天翼
结构体了解一下:
struct ...{
int... //意思是你在结构体里可以随便定义多个类型不同的变量
char...
string...
double...
}数组[(随便你设定大小)];//这里一定要有分号!!!
比如:
struct xs{
string name;
int xb,xh,y,m,d;
}a[200];
这题基本上就是在main函数外的做文章
结构体里的你自己想,就定义shi,fen,miao,还有a[16000]//结构体名称:sj(时间)
还有bool的cmp:
bool cmp(sj a,sj b){//sj就要一样,不一样就报错,不信自己试试
if(a.shi!=b.shi){
return a.shi<b.shi;
}
if(a.fen!=b.fen){
return a.fen<b.fen;
}
return a.miao<b.miao;
}
然后sort排序,sort总会了吧:
sort(a+1,a+1+n,cmp);
最后将排好序的输出就好了
//PS:你终于不发水帖了
望采纳~
初级天翼
核心:
结构体 sj{
整形 shi,fen,miao;
}a[15005];
布尔 cmp(sj a,sj b){
如果(a.shi != b.shi){
返回 a.shi < b.shi;
}
如果(a.fen != b.fen){
返回 a.fen < b.fen;
}
返回 a.miao < b.miao;
}//以上内容均在主函数外!别放主函数内了!
int main(){//看到主函数了吗?!在这!
定义 n;
输入 n;
循环(1~n){
输入 a[i].shi a[i].fen a[i].miao;
}
sort(a+1,a+n+1,cmp函数);
循环(1~n){
//输出就改一下输入,记得加换行!
}
资深守护
核心:
struct cl{
int s,f,m;
}a[15005];
bool cmp(cl x,cl y)
{
if(x.s!=y.s)
return x.s<y.s;
else if(x.f!=y.f)
return x.f<y.f;
else
return x.m<y.m;
}
用结构体+sort排序sort(a+1,a+1+n,cmp);
新手天翼
结构体:
if(x.h!=y.h)
return x.h<y.h;
if(x.m!=y.m)
return x.m<y.m;
return x.s<y.s;
高级启示者
@吕梓瑜
#include<bits/stdc++.h>
using namespace std;
int main(){
struct f{
int s,f,m;
}a[15005];
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i].s>>a[i].f>>a[i].m;
}
bool cmp(f a,f b){
if(a.s!=b.s){
return a.s<b.s;
}else if(a.f!=b.f){
return a.f<b.f;
}else if(a.m!=b.m){
return a.m<b.m;
}
}
for(int i=1;i<=n;i++){
cout<<a[i].s<<" "<<=a[i].f<<" "<<a[i].m<<endl;
sort(a+1,a+1+n,cmp);
}
return 0;
}
第12行爆错
李宜和在2021-07-29 11:44:27追加了内容
加豆了
资深光能
定义一个结构体,包含h(小时),m(分钟),s(秒).
输入后,按照这样的cmp进行排序
bool cmp(变量1,变量2)
{
if(变量1.h!=变量2.h)
return 变量1.h<变量2.h;
if(变量1.m!=变量2.m)
return 变量1.m<变量2.m;
if(变量1.s!=变量2.s)
return 变量1.s<变量2.s;
}
最后输出即可。
高级启示者
@张展嘉
#include<bits/stdc++.h>
using namespace std;
struct f{
int s,f,m;
}a[15005];
bool cmp(f a,f b){
if(a.s!=b.s){
return a.s<b.s;
}else if(a.f!=b.f){
return a.f<b.f;
}else if(a.m!=b.m){
return a.m<b.m;
}
}
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i].s>>a[i].f>>a[i].m;
}
sort(a+1,a+1+n,cmp);
for(int i=1;i<=n;i++){
cout<<a[i].s<<" "<<=a[i].f<<" "<<a[i].m<<endl;
}
return 0;
}
李宜和在2021-07-29 11:59:37追加了内容
不对
初级天翼
#include<bits/stdc++.h>
using namespace std;
struct函数
cmp函数
int main()
{
//freopen(".in","r",stdin);
//freopen(".out","w",stdout);
int n;
cin>>n;
输入循环
sort排序;
输出循环
//fclose(stdin);
//fclose(stdout);
return 0;
}