【CSP试题回顾】201503-3-节日

CSP-201503-3-节日

关键点:格式化输出

在C++中,格式化输出通常利用iostream库中的功能,特别是iomanip头文件提供的一系列操作符。这些操作符用于控制输出格式,如宽度、填充、对齐方式等。在你提供的代码中,用于格式化输出的部分主要涉及setwsetfill操作符。

  1. setw(int n):这是一个格式化操作符,用于设置下一个输出值的宽度。在此处,n代表输出值应占用的字符数。如果实际数值的位数少于n,则根据对齐方式(默认右对齐),输出会在左侧填充空格或其他字符(如果设置了填充字符)。

  2. setfill(char c):这个操作符用于设置用于填充额外空间的字符。默认情况下,如果使用setw设置的宽度大于实际数据的宽度,空出的位置会被空格填充。setfill可以改变这个默认行为,用另一个字符来替代空格。例如,setfill('0')会使用0来填充空白。例如

    • setw(4) << setfill('0') << year:这保证了年份year以四个字符的宽度输出,不足四位的部分会用0补足。例如,如果年份是1995,它将正常输出为"1995";如果年份是205,则输出为"0205"。

解题思路

  1. 输入年份和日期规则:用户输入五个整数:a(月份),b(该月的第几个星期),c(星期几),y1(开始年份),y2(结束年份)。程序需要输出从y1年到y2年每年的a月第b个星期c的日期。

  2. 闰年判断:实现一个isLeapYear函数来判断给定的年份是否是闰年。如果年份能被400整除,或者能被4整除但不能被100整除,则该年是闰年。这对于计算二月份的天数和确定日期很重要。

  3. 计算天数总和:从1850年开始,计算到目标年份(year)之前的所有年份中每一年的天数总和。普通年有365天,闰年有366天。

  4. 月份处理:累加目标年份的月份之前的所有月份的天数。如果目标年份是闰年并且目标月份大于2月(意味着影响到二月的天数),则需要额外加一天。

  5. 计算目标月份的第一天是星期几:已知1850年1月1日是星期二,基于这一点和之前累计的天数,可以计算出目标月份的第一天是星期几。

  6. 计算目标日期:基于目标月份的第一天是星期几,计算出该月的第b个星期c是哪一天。这里需要考虑目标星期c与该月第一天星期的差,并计算出准确日期。

  7. 输出结果:对于每个年份,先检查计算出来的日期是否合法(即是否超出了该月的实际天数)。如果日期合法,则以“yyyy/mm/dd”的格式输出;如果不合法(如计算出的日期超出了该月的天数),则输出"none"。

  8. 异常处理和格式化:程序需要处理各种边界情况,如闰年的二月、每个月的天数不同等。同时,输出格式要求年、月、日分别以四位数、两位数、两位数表示,位数不足时前面补零。

完整代码

#include<iostream>
#include<string>
#include<vector>
#include <iomanip> 
using namespace std;bool isLeapYear(int year) {return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}
int daysOfMonth[] = { 31,28,31,30,31,30,31,31,30,31,30,31 };int main() {int month, weekOrdinal, weekday, startYear, endYear;cin >> month >> weekOrdinal >> weekday >> startYear >> endYear;for (int year = startYear; year <= endYear; year++) {long long dayCount = 0;  // 从1850年1月1日起的总天数for (int i = 1850; i < year; i++) {dayCount += isLeapYear(i) ? 366 : 365;}for (int i = 1; i < month; i++) {dayCount += daysOfMonth[i - 1];}if (isLeapYear(year) && month > 2) dayCount++;  // 闰年且月份超过2,增加一天int firstDayOfWeek = (2 + dayCount) % 7;  // 当前年月的1号是星期几if (firstDayOfWeek == 0) firstDayOfWeek = 7;  // 调整星期的值,使其从1到7int dayOfMonth = 1 + (weekOrdinal - 1) * 7;  // 当月的目标日期int offset = weekday - firstDayOfWeek;  // 需要调整的天数if (offset < 0) offset += 7;dayOfMonth += offset;// 检查日期是否存在(注意闰年)if (dayOfMonth > (month == 2 && isLeapYear(year) ? 29 : daysOfMonth[month - 1])) {cout << "none" << endl;  // 日期不存在}else {cout << year << "/" << setw(2) << setfill('0') << month << "/" << setw(2) << setfill('0') << dayOfMonth << endl;}}return 0;
}

请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/519907.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

换个角度看禅让制止于禹

前言 在历史课本上&#xff0c;对尧、舜、禹三代君王的描述是&#xff0c;他们在去世之前通过禅让制的方式把自己的王位禅让给了其他有贤明的能臣。 禅让制也是中国古代时期被无数的文人志士追捧的一个制度&#xff0c;因为他们觉得那个时代是公天下的时代。 可实际上自从人…

lanqiao:合根植物

题目描述&#xff1a; 代码实现&#xff1a;

江苏某机场多座超高端智慧公厕上线

作为行业信息化程度最高的智慧机场综合管理系统&#xff0c;能为旅客、航空公司以及机场自身的业务管理提供及时、准确、系统、完整的信息服务&#xff0c;达到信息高度统一、共享、调度严密、管理先进和服务优质的目的。而其中的智慧卫生间建设&#xff0c;更是提升机场旅客服…

opengl 学习(二)-----你好,三角形

你好&#xff0c;三角形 分类demo效果解析 分类 opengl c demo #include "glad/glad.h" #include "glfw3.h" #include <iostream> #include <cmath> #include <vector>using namespace std;/** * 在学习此节之前&#xff0c;建议将这…

堆和堆排序

堆排序是一种与插入排序和并归排序十分不同的算法。 优先级队列 Priority Queue 优先级队列是类似于常规队列或堆栈数据结构的抽象数据类型&#xff08;ADT&#xff09;。优先级队列中的每个元素都有一个相关联的优先级key。在优先级队列中&#xff0c;高优先级的元素优先于…

【文件增量备份系统】使用Mysql的流式查询优化数据清理性能(针对百万量级数据)

文章目录 功能介绍原始方案测试 流式处理测试 功能可用性测试 功能介绍 清理功能的作用是&#xff1a;扫描数据库中已经备份过的文件&#xff0c;查看数据源中是否还有相应的文件&#xff0c;如果没有&#xff0c;说明该文件被删除了&#xff0c;那相应的&#xff0c;也需要将…

11 OpenCV 上采样与降采样,高斯不同(DOG)

文章目录 算子什么是高斯不同示例 算子 pyrUp(Mat src, Mat dst, Size(src.cols*2, src.rows*2)) 生成的图像是原图在宽与高各放大两倍 pyrDown(Mat src, Mat dst, Size(src.cols/2, src.rows/2)) 生成的图像是原图在宽与高各缩小1/2什么是高斯不同 定义&#xff1a;就是把同…

web学习笔记(二十七)PC端网页特效

目录 1.元素偏移量offset 1.1什么是offset 1.2offset系列常用属性 1.3offset总结 1.4offset 与 style 区别 2.元素可视区client 3.元素滚动scroll 4.总结 4.1三大系列总结 4.2 mouseenter 和mouseover的区别 1.元素偏移量offset 1.1什么是offset offset就是偏移量…

可视化图表:柱坐标系与对应图表详解

一、柱坐标系及其构成 柱状坐标系是一种常见的可视化图表坐标系&#xff0c;用于显示柱状图&#xff08;也称为条形图&#xff09;的数据。它由两个相互垂直的轴组成&#xff0c;一个是水平轴&#xff08;X轴&#xff09;&#xff0c;另一个是垂直轴&#xff08;Y轴&#xff0…

Linux编程3.4 进程-进程标识

1、相关函数 #include<unistd.h> #include<sys/types.h> pid_t getpid(void); 获得当前进程ID uid_t getuid(void); 获得当前进程的实际用户ID uit_t geteuid(void); 获得当前进程的有效用户ID git_t getgid(void); 获得当前进程的用户组ID pit_t getppid(…

深入解析Java中的异常处理机制

摘要&#xff1a; 异常处理是Java编程中不可或缺的一部分&#xff0c;它允许我们以优雅的方式处理程序运行时可能出现的问题。本文将深入探讨Java中的异常处理机制&#xff0c;包括异常类的层次结构、声明异常和处理异常的方法。通过两个实际的代码案例&#xff0c;我们将详细…

Mac版2024 CleanMyMac X 4.14.6 核心功能详解以及永久下载和激活入口

CleanMyMac 是 macOS 上久负盛名的系统清理工具&#xff0c;2018 年&#xff0c;里程碑式版本 CleanMyMac X 正式发布。不仅仅是命名上的变化&#xff0c;焕然一新的 UI、流畅的动画也让它显得更加精致。新增的系统优化、软件更新等功能&#xff0c;使得在日常使用 macOS 时有了…