C/C++蓝桥杯之日期问题
问题描述:小明正在整理一批文献,这些文献中出现了很多日期,小明知道这些日期都在1960年1月1日至2059年12月31日之间,令小明头疼的是,这些日期采用的格式非常不统一,有采用年/月/日的,有采用月/日/年的,还有采用日/月/年的,更加麻烦的是年份都省略了前两位,使得文献上的一个日期存在很多可能的日期与其对应。
例如02/03/04,可能是2002年03月04日、2004年02月03日或2004年03月02日。
程序输入格式:AA/BB/CC(0<=A,B,C<=9)
输出格式:输出若干个不相同的日期,每个日期一行格式是:''yyyy-mm-dd''多个日期按从早到晚的顺序排列。
分析:本题的思路很简单,将输入的三个数据分别进行年,月,日的合法判断,如果合法就输出,但是求解本题要注意以下两点。
(1)月份数据的表示
由于每月的天数没有规律性,所以最好的方法就是利用数组将每月的天数表示出来,如:
int days[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
这里还要注意闰年问题,如果是闰年,则二月的数据就会不同,可以采用另一个数组存储
如:int leapdays[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};
(2)合法年/月/日的存储
对于一组数据可能会出现重复的合法年/月/日。例如:01/01/01,这三组合法数据都是2001/01/01,所以这要进行去重。
去重时,可以采用直接判断三组数据是否相等的方法,也可以利用C++ STL中的set容器进行自动去重。
用C语言:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int days[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };//不是闰年的时候
int leapdays[13] = { 0,31,29,31,30,31,30,31,31,30,31,30,31 };//是闰年的时候
int data[4][4];//用来存放日期
int i;//用于数组的序号
int leapyear(int year)//判断是否是闰年
{if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0){return 1;}else{return 0;}
}
void check(int y, int m, int d)
{if (y >= 60)//年份的后两位大于60,说明应该是19年开头{y = 19 * 100 + y;}else//否则是20年开头{y = 20 * 100 + y;}if (m > 12)return;if(leapyear(y))//判断是否是闰年,采用对应的数组{if(leapdays[m]<d)return;}else{if(days[m]<d)return;}if (i > 0)//进行去重处理{for (int j = 0; j < i; j++){if (data[j][0] == y && data[j][1] == m && data[j][2] == d)//判断日期是不是合法 return;}}data[i][0] = y;data[i][1] = m;data[i][2] = d;i++;
}int main()
{int a, b, c, e, f, g;int d[3];i = 0;scanf("%d/%d/%d", &a, &b, &c);check(a, b, c);//分别互换日期查看是否成立check(c, a, b);check(c, b, a);for (int j = 0; j < i; j++){d[j] = data[j][0] * 10000 + data[j][1] * 100 + data[j][2];}for (int m = 0; m < i; m++)//按从早到晚的顺序排列{for (int n=0; n < i - 1 - m; n++){if (d[n] > d[n + 1]){int tmp = d[n];d[n] = d[n + 1];d[n + 1] = tmp;}}}for (int j = 0; j < i; j++)//打印{e = d[j] / 10000;f = (d[j] / 100) % 100;g = d[j] % 100;printf("%d-%02d-%02d\n", e, f, g);}return 0;
}
用C++:
#include<bits/stdc++.h>
using namespace std;
struct date //定义一个结构体存放日期
{ int year;int month;int day;
}que[4];
int s=0; //用于结构体的序号
int cmp(date x,date y);//比较函数sort的参数,定义了怎样排序
int leapyear(int year);//用于判断是不是闰年
int judge_date(int year,int month,int day);//判断日期是不是合法
void judge(int year,int month,int day);//主要调用上面函数,把日期存进数组 void judge(int year,int month,int day)
{int flag=1; //标记日期是否重复 if(year>=60)//年份的后两位大于60,说明应该是19年开头year = 19* 100 + year;else year = 20* 100 + year;if(judge_date(year,month,day)){ //如果日期合法 for(int i=0;i<s;i++){ //判断结构体中是否已经存在相同的日期 if(que[i].day==day&&que[i].month==month&&que[i].year==year){ flag=0;break;}}if(flag){ //如果没有相同的日期就存进结构体中 que[s].year=year;que[s].month=month;que[s].day=day;s++;}}
}int judge_date(int year,int month,int day) //判断日期是否合法
{ int sum;switch(month) //判断输入的月份一共有多少天,和输入的天数比较 { case 1: case 3: case 5: case 7: case 8: case 10: case 12:sum=31;break;case 4:case 6: case 9: case 11:sum=30;break;case 2:sum=28;break;}if(month==2&&leapyear(year))sum=29;if(sum>=day&&day>0&&month>=1&&month<=12) //如果天数小于该月总天数,且大于0,月份也在1~12,则合法 return 1; elsereturn 0;
}int leapyear(int year)
{ //判断是否闰年 if(year%4==0 && year%100!=0 || year%400==0)return 1;elsereturn 0;
}int cmp(date x,date y)
{ //比较函数 if(x.year<y.year) //年份按递增排序 return 1;else if(x.year==y.year) { //如年份相同,比较月份 if(x.month<y.month)return 1;else if(x.month==y.month) //如月份相同,比较天数 { if(x.day<y.day)return 1;}}return 0;
}
int main()
{int a,b,c;scanf("%d/%d/%d",&a,&b,&c);judge(a,b,c);//分别把日期换位置,看是否合法judge(c,a,b);judge(c,b,a);sort(que,que+s,cmp);//按从早到晚的顺序排列 for(int i=0;i<s;i++)//输法日期 printf("%d-%02d-%02d\n",que[i].year,que[i].month,que[i].day);return 0;
}
相关文章:
C/C++蓝桥杯之日期问题
问题描述:小明正在整理一批文献,这些文献中出现了很多日期,小明知道这些日期都在1960年1月1日至2059年12月31日之间,令小明头疼的是,这些日期采用的格式非常不统一,有采用年/月/日的,有采用月/日…...
【理解指针(二)】
文章目录 一、指针的运算(1)指针加整数(2)指针减指针(指针关系运算) 二、野指针(1)野指针的成因(1.1)指针未初始化(1.2)指针的越界访问…...
使用AI纠正文章
我写了一段关于哲学自学的读书笔记,处于好奇的目的,让AI帮我纠正语法和逻辑。我的原文如下: 泰勒斯第一次提出了水是万物本源的说法,对于泰勒斯为什么提出这样的观点,或者是这样的观点是怎么来的,我们无从所…...
拼多多API批量获取商品详情信息
随着电子商务的蓬勃发展,淘宝作为中国最大的在线购物平台之一,每天需要处理海量的商品上架和交易。为了提高工作效率,自动化上架商品和批量获取商品详情信息成为了许多商家和开发者的迫切需求。本文将详细介绍淘宝的API接口及其相关技术&…...
杨辉三角(C语言)
杨辉三角 一.什么是杨辉三角 一.什么是杨辉三角 每个数等于它上方两数之和。 每行数字左右对称,由1开始逐渐变大。 第n行的数字有n项。 前n行共[(1n)n]/2 个数。 … 当前行的数上一行的数上一行的前一列的数 void yanghuisanjian(int arr[][20], int n) {for (int i…...
宏任务与微任务:JavaScript异步编程的秘密
🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…...
vant van-field 密码输入框小程序里隐藏、显示密码bug总结
老规矩先上效果图: vant 输入框组件 密码的隐藏与显示功能: 注: 用password属性控制密码的显示与隐藏 不要用type属性,type属性在真机上有时会没有效果 1、当然如果只用typepassword 不需要切换显示、隐藏也可以使用。 2、如果用到了密码的显示与…...
代理ip应用场景
代理IP是一种网络技术,它允许用户通过中间来访问互联网资源,隐藏真实的IP地址代理IP的应用场景非常泛,以下是一些常见的应用场景: 1 隐私保护:使用代理IP可以隐藏用户的真实IP地址,保护个人隐私。在浏览网…...
C/C++指针详解
接下来我们来介绍一下什么是指针? 指针其实就是元素存放地址,更加形象的比喻:在酒店中如果你想要去注必须去付费不然不能住,在计算机也同样如此(但是不需要付费哦)每当我们使用一个变量或其他需要申请空间…...
实验一:华为VRP系统的基本操作
1.1实验介绍 1.1.1关于本实验 本实验通过配置华为设备,了解并熟悉华为VRP系统的基本操作 1.1.2实验目的 理解命令行视图的含义以及进入离开命令行视图的方法 掌握一些常见的命令 掌握命令行在线帮助的方法 掌握如何撤销命令 掌握如何使用命令快捷键 1.1.3实验组网 …...
ChatGPT发不出消息?GPT发不出消息怎么办?
前言 今天发现,很多人的ChatGPT无法发送信息,我就登陆看一下自己的GPT的情况,结果还真的无法发送消息,ChatGPT 无法发送消息,但是能查看历史的对话,不过通过下面的方法解决了。 第一时间先打开官方的网站&a…...
【论文笔记】Language Models are Few-Shot Learners
Language Models are Few-Shot Learners 回顾一下第一代 GPT-1 : 设计思路是 “海量无标记文本进行无监督预训练少量有标签文本有监督微调” 范式;模型架构是基于 Transformer 的叠加解码器(掩码自注意力机制、残差、Layernorm)&a…...
解决:Glide 在回调中再次加载图片报错
一、问题说明 Glide 加载图片时监听了回调,并在失败时再次加载其它图片后报错。 代码: Glide.with(mContext).load(imgTeacher).listener(new RequestListener<Drawable>() {Overridepublic boolean onLoadFailed(Nullable GlideException e, O…...
Java学习笔记之IDEA的安装与下载以及相关配置
1 IDEA概述 IDEA全称IntelliJ IDEA,是用于Java语言开发的集成环境,它是业界公认的目前用于Java程序开发最好的工具。 集成环境: 把代码编写,编译,执行,调试等多种功能综合到一起的开发工具。 2 IDEA…...
【共享内存】System V共享内存{通信原理/相关接口/代码测试}
文章目录 1.初识共享内存1.0浅谈System V1.1什么是共享内存?1.2Linux-System V共享内存1.3图解共享内存1.4对共享内存的理解 2.创建共享内存2.1共享内存如何创建?2.2代码运行与测试2.3shm与pipe的区别2.4shm缺乏访问控制 3.代码理解shm3.1Log.hpp3.2comm…...
Web渗透测试流程
什么是渗透测试 渗透测试 (penetration test),是通过模拟恶意黑客的攻击方法,来评估计算机网络系统安全的一种评估方法。这个过程包括对系统的任何弱点、技术缺陷或漏洞的主动分析,这个分析是从一个攻击者可能存在的位置来进行的,并且从这个…...
探索机器学习的无限可能性:从初学者到专家的旅程
探索机器学习的无限可能性:从初学者到专家的旅程 在当今数字时代,机器学习无疑是最引人注目的技术之一。它已经深入到我们生活的方方面面,从个性化推荐到自动驾驶汽车,再到医疗诊断和金融预测。但是,即使我们已经见证…...
【python】六个常见爬虫案例【附源码】
大家好,我是博主英杰,整理了几个常见的爬虫案例,分享给大家,适合小白学习 一、爬取豆瓣电影排行榜Top250存储到Excel文件 近年来,Python在数据爬取和处理方面的应用越来越广泛。本文将介绍一个基于Python的爬虫程序&a…...
Java零基础-多维数组
哈喽,各位小伙伴们,你们好呀,我是喵手。 今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。 我是一名后…...
Linux网络套接字之UDP网络程序
(。・∀・)ノ゙嗨!你好这里是ky233的主页:这里是ky233的主页,欢迎光临~https://blog.csdn.net/ky233?typeblog 点个关注不迷路⌯▾⌯ 实现一个简单的对话发消息的功能! 目录…...
eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)
说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...
多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度
一、引言:多云环境的技术复杂性本质 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,基础设施的技术债呈现指数级积累。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...
Linux链表操作全解析
Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表?1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...
K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...
JavaScript 中的 ES|QL:利用 Apache Arrow 工具
作者:来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗?了解下一期 Elasticsearch Engineer 培训的时间吧! Elasticsearch 拥有众多新功能,助你为自己…...
关于nvm与node.js
1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…...
对WWDC 2025 Keynote 内容的预测
借助我们以往对苹果公司发展路径的深入研究经验,以及大语言模型的分析能力,我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际,我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测,聊作存档。等到明…...
Web中间件--tomcat学习
Web中间件–tomcat Java虚拟机详解 什么是JAVA虚拟机 Java虚拟机是一个抽象的计算机,它可以执行Java字节码。Java虚拟机是Java平台的一部分,Java平台由Java语言、Java API和Java虚拟机组成。Java虚拟机的主要作用是将Java字节码转换为机器代码&#x…...
【iOS】 Block再学习
iOS Block再学习 文章目录 iOS Block再学习前言Block的三种类型__ NSGlobalBlock____ NSMallocBlock____ NSStackBlock__小结 Block底层分析Block的结构捕获自由变量捕获全局(静态)变量捕获静态变量__block修饰符forwarding指针 Block的copy时机block作为函数返回值将block赋给…...
负载均衡器》》LVS、Nginx、HAproxy 区别
虚拟主机 先4,后7...
