P1104题解
  • 板块P1104 生日
  • 楼主yibeiCZ
  • 当前回复5
  • 已保存回复5
  • 发布时间2024/10/19 15:15
  • 上次更新2024/10/19 15:22:18
查看原帖
P1104题解
1273267
yibeiCZ楼主2024/10/19 15:15

萌新第一次发题解,大佬们多多指教~

一个普通不过的C++题解...... 其实结构体cmp排序可以解决,建议用scanf输入会快一些。奉上AC代码一份。。。

#include<algorithm>
#include<string.h>
#include<iostream>
using namespace std;
struct st{
	string a;
	int b,c,d,e;
};
bool cmp(st a,st b){
	if(a.b!=b.b)return a.b<b.b;
	if(a.c!=b.c)return a.c<b.c;
	if(a.d!=b.d)return a.d<b.d;
	return a.e>b.e;
}
int main(){
	int n;
	scanf("%d",&n);
	st a[n];
	for(int i=0;i<n;i++){
        cin>>a[i].a>>a[i].b>>a[i].c>>a[i].d;
        a[i].e=i;
    }
	sort(a,a+n,cmp);
	for(int i=0;i<n;i++)
		cout<<a[i].a<<endl;
	return 0;
}

前置知识

sort排序是什么?

“‌sort排序是一种将数组或列表中的元素按照一定的顺序排列的方法。‌ sort排序可以是将数组进行升序或降序排序,默认情况下是升序排序。sort排序比传统的排序算法(如冒泡排序)更,且使用时需要包含相应的头文件。(algorithm.h)” “‌sort函数原型为:void sort (‌RandomAccessIterator first, RandomAccessIterator last, ‌Compare comp);‌‌1

该函数原型定义了三个参数:

‌first‌:表示要排序数组的起始地址,迭代器的起始位置,对于数组来说就是数组的首地址。 ‌last‌:表示数组结束地址的下一位,迭代器的结束位置,即首地址加上数组的长度n(代表尾地址的下一地址)。 ‌comp‌:用于规定排序的方法,可以是标准库提供的排序规则(如std::greater进行降序排序),也可以是一个自定义的排序函数。”

该题思路:

使用string字符串进行自定义结构体排序
结构体:
用st表示。其中st.a为人名,st.b为出生年份,st.c为出生月份,st.d为出生日期。
排序方式:
用生活中衡量年龄的方法,按年-月-日来进行sort排序。
这样便可以轻松AC

题后感

这道题使用了寓情于题的描写手法,体现了作者对生日的喜爱与赞美之情,借题目本身抒发优雅的情感,手法十分高超。(bushi

----------- 阅读题后遗症 -----------

2024/10/19 15:15
加载中...