当前位置: 首页 > news >正文

C语言练习题--洛谷P生日*****(学会了新的思路)

题目描述

cjf 君想调查学校 OI 组每个同学的生日,并按照年龄从大到小的顺序排序。但 cjf 君最近作业很多,没有时间,所以请你帮她排序。

输入格式

输入共有 n+1 行,

第 1 行为 OI 组总人数 n;

第 2 行至第 n+1 行分别是每人的姓名 s、出生年 y、月 m、日 d。

输出格式

输出共有 n 行,

即 n 个生日从大到小同学的姓名。(如果有两个同学生日相同,输入靠后的同学先输出)

输入输出样例

输入 #1复制

3
Yangchu 1992 4 23
Qiujingya 1993 10 13
Luowen 1991 8 1

输出 #1复制

Luowen
Yangchu
Qiujingya

说明/提示

数据保证,1<n<100,1≤∣s∣<20。保证年月日实际存在,且年份 ∈[1960,2020]。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct stu
{
	int num;
	int date;
	char name[25];
};
int compar(const void *p1,const void *p2)
{
	return ((struct stu*)p1)->date-((struct stu*)p2)->date;
}
int main()
{
	int n,i,y,m,d;
	struct stu str[115];
	scanf("%d",&n);
	for(i=0;i<n;i++)
	{
		scanf("%s%d%d%d",str[i].name,&y,&m,&d);
		str[i].num=i;
		str[i].date=y*10000+m*100+d;//把每个人的年月日组成一个数字,数字越小,代表年龄越大,或许前面的排序题也可以用这种组合的思路,可以省去很多if哈哈哈
	}
	qsort(str,n,sizeof(str[0]),compar);
	for(i=1;i<n;i++)
	{
		if(str[i].date==str[i-1].date)
		{
			if(str[i].num>str[i-1].num)
			{
				char ans[25]={'\0'};
				strcpy(ans,str[i].name);
				strcpy(str[i].name,str[i-1].name);
				strcpy(str[i-1].name,ans);
			}
		}
	}
	for(i=0;i<n;i++)
	printf("%s\n",str[i].name);
	return 0;

}

相关文章:

  • leetcode日记(90)二叉树的锯齿形层序遍历
  • 【已解决】最新 Android Studio(2024.3.1版本)下载安装配置 图文超详细教程 手把手教你 小白
  • 文件操作详解(万字长文)
  • 如何检查电脑的硬盘健康状况?
  • 深入解析 C++20 中的 `std::span`:高效、安全的数据视图
  • JWT在.NET8 Webapi中的使用
  • 行为模式---状态模式
  • 【Linux】37.网络版本计算器
  • 明日直播|Go IoT 开发平台,开启万物智联新征程
  • Android 内存泄漏实战:从排查到修复的完整指南
  • ThreadLocal源码剖析
  • 重估首程控股:一只产业生态完整的“机器人ETF”
  • 第7节: 广域网协议与WLAN技术入门
  • 如何用Python提取JSON数据中的键值对并保存为CSV文件?
  • Win 转 MacBook Pro 踩坑指南
  • java BCC异或校验例子
  • 使用Mockito实现单元测试
  • Bootstrap:图标库的安装及其使用
  • spring boot和spring cloud的区别
  • 【0016】Python数据类型-不可变集合详解
  • 印度袭击巴基斯坦已致至少3人死亡
  • 新闻1+1丨多地政府食堂开放 “舌尖上的服务”,反映出怎样的理念转变?
  • 文旅局局长回应游客住家里:“作为一个宣恩市民我也会这么做”
  • 日本政府强烈反对美关税政策并要求其取消
  • 全国铁路旅客发送量连续3天同比增幅超10%,今日预计发送1800万人次
  • 高速变道致连环车祸,白车“骑”隔离栏压住另一车,交警回应