问题标题: 1097 作息时间

0
0
已解决
李宜和
李宜和
高级启示者
高级启示者

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;

}


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追加了内容

嗷呜~

0
张展嘉
张展嘉
新手天翼
新手天翼

这道题可以定义结构体:

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;
    }
}

剩下的就没问题啦!

0
朱优扬
朱优扬
中级天翼
中级天翼
核心:
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;

 

0
0
0
潘艺博
潘艺博
初级天翼
初级天翼

结构体了解一下:

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:你终于不发水帖了

望采纳~

0
朱小川
朱小川
缔造者
缔造者

1 用swap没用

2 看知识点,结构体函数

3 请看同上

0
潘艺博
潘艺博
初级天翼
初级天翼

核心:

结构体 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){

     //输出就改一下输入,记得加换行!

 

0
杨淮乐
杨淮乐
资深守护
资深守护

核心: 

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);

 

 

0
李宜和
李宜和
高级启示者
高级启示者

@吕梓瑜 

不对啊

 

李宜和在2021-07-29 08:47:51追加了内容

@潘艺博 

0
褚俊皓
褚俊皓
新手天翼
新手天翼

结构体:

 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;

 

0
0
李宜和
李宜和
高级启示者
高级启示者

@吕梓瑜 

#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追加了内容

加豆了

0
周明轩
周明轩
资深光能
资深光能

定义一个结构体,包含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;
}

最后输出即可。

0
李宜和
李宜和
高级启示者
高级启示者

@张展嘉 

#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追加了内容

不对

0
吕梓瑜
吕梓瑜
初级天翼
初级天翼
#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;
}

 

0
我要回答