【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到7

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

请添加图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

飞桨AI框架安装和使用示例

飞桨AI框架安装和使用示例 飞桨PaddlePaddle是非常流行的国产AI框架&#xff0c;让我们一起来动手实践吧&#xff01; 安装 飞桨安装参考页面&#xff1a;https://www.paddlepaddle.org.cn/install/quick?docurl/documentation/docs/zh/install/pip/linux-pip.html 在这个安…

乌鸡的身高

解法&#xff1a; 只需要看身高最高的乌鸡个数是否>2.若满足则除去当前这只乌鸡的最高身高都是最高身高。 若不满足则只需要看最高的和第二高的乌鸡。 #include<iostream> #include<vector> #include<algorithm> #include<cmath> using namespac…

leetcode 热题 100_滑动窗口最大值

题解一&#xff1a; 双端队列&#xff1a;滑动窗口的本质是在窗口末尾添加一个元素&#xff0c;并移除头部的一个元素。对于添加的元素&#xff0c;直接和当前最大值比较即可&#xff0c;但对于移除的元素&#xff0c;如果移除的是原先的最大值&#xff0c;则需要重新遍历窗口寻…

支小蜜校园防欺凌系统如何有效应对学生霸凌?

学生霸凌不仅直接伤害到被霸凌者的身心健康&#xff0c;也对整个校园的和谐氛围构成了威胁。为了应对这一问题&#xff0c;校园防欺凌系统应运而生&#xff0c;成为维护校园安全、保护学生权益的重要工具。那么当校园防欺凌系统面对学生霸凌时&#xff0c;该如何有效应对呢&…

3.6 day1 FreeRTOS

1.总结keil5下载代码和编译代码需要注意的事项 注意要将魔术棒的的debug选项中的setting中的flashdownload中的reset and run 勾选上&#xff0c;同时将pack中的enable取消勾选 2.总结STM32Cubemx的使用方法和需要注意的事项 可以通过功能列表对引脚进行设置&#xff0c;并且可…

重新排序。

问题描述 给定一个数组A和一些查询 L,R求数组中第L至第 R个元素之和。 小蓝觉得这个问题很无聊,于是他想重新排列一下数组使得最终每个查 询结果的和尽可能地大。小蓝想知道相比原数组,所有查询结果的总和最多可 以增加多少? 输入格式 输入第一行包含一个整数n。 第二行包含n个…

一篇文章带你通关并查集(持续更新中)

这篇文章的所有题目均来自于自行整理&#xff0c;代码均来自于自行梳理调试&#xff08;思路可能比较暴力&#xff09;。初衷在于整理练习思路&#xff0c;且起到督促自己学习的作用 本文分成将三个模块 1.普及组 &#xff08;洛谷黄题&#xff09; 2.提高组 &#xff08;洛…

数据结构与算法-线性查找

引言 在计算机科学领域&#xff0c;数据结构和算法是构建高效软件系统的核心要素。今天我们将聚焦于最基础且广泛应用的一种查找算法——线性查找&#xff0c;并探讨其原理、实现步骤以及实际应用场景。 一、什么是线性查找&#xff1f; 线性查找&#xff08;Linear Search&am…

腾讯云哪款服务器最便宜划算?2024腾讯云服务器优惠价格表

腾讯云优惠活动2024新春采购节活动上线&#xff0c;云服务器价格已经出来了&#xff0c;云服务器61元一年起&#xff0c;配置和价格基本上和上个月没什么变化&#xff0c;但是新增了8888元代金券和会员续费优惠&#xff0c;腾讯云百科txybk.com整理腾讯云最新优惠活动云服务器配…

嵌入式学习第二十六天!(网络传输:TCP编程)

TCP通信&#xff1a; 1. TCP发端&#xff1a; socket -> connect -> send -> recv -> close 2. TCP收端&#xff1a; socket -> bind -> listen -> accept -> recv -> send -> close 3. TCP需要用到的函数&#xff1a; 1. co…

CIA402协议笔记

文章目录 1、对象字典1.1 Mode of Operation&#xff08; 606 0 h 6060_h 6060h​)1.2 Modes of opration display( 606 1 h ) 6061_h) 6061h​) 2、状态机2.1 控制字&#xff08;ControlWord、6040h&#xff09;2.2 状态字&#xff08;StatusWord、6041h&#xff09;2.3 shutd…

练习 6 Web [极客大挑战 2019]HardSQL

[极客大挑战 2019]HardSQL 先尝试登录&#xff0c;查看报错信息 admin 111 password 1111 登录失败admin 111 password 1’or’1 登录成功 这里直接试了万能密码成功&#xff0c;复习一下&#xff0c;第一个 ’ 是为了闭合前面的sql语句&#xff0c;最后的1后面没有 ’ 是因为…

钉钉群内自定义机器人发送消息功能实现

文章目录 钉钉群内自定义机器人发送消息功能实现1、设置webhook自定义机器人2、查看官方文档&#xff0c;使用open api3、编写业务代码4、发送成功结果如下 钉钉群内自定义机器人发送消息功能实现 1、设置webhook自定义机器人 设置关键词 添加完成后&#xff0c;获得改机器人的…

【R语言实战】聚类分析及可视化

&#x1f349;CSDN小墨&晓末:https://blog.csdn.net/jd1813346972 个人介绍: 研一&#xff5c;统计学&#xff5c;干货分享          擅长Python、Matlab、R等主流编程软件          累计十余项国家级比赛奖项&#xff0c;参与研究经费10w、40w级横向 文…

外包干了8天,技术退步明显。。。。。

先说一下自己的情况&#xff0c;本科生&#xff0c;19年通过校招进入杭州某软件公司&#xff0c;干了接近3年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…

泰克P6139B TektronixP6139B无源探头

特征&#xff1a; 500 MHz 探头带宽 探头尖端的大输入阻抗 10 MOhm&#xff0c;8 pF 补偿范围&#xff1a;8 pF 至 18 pF 电缆长度&#xff1a;1.3M 10X 衰减系数 300 V CAT II 输入电压 用于探测小几何电路元件的紧凑型探头 用于增强被测设备可见性的小型探头主体 可更换的探…

Qt+FFmpeg+opengl从零制作视频播放器-1.项目介绍

1.简介 学习音视频开发&#xff0c;首先从做一款播放器开始是比较合理的&#xff0c;每一章节&#xff0c;我都会将源码贴在最后&#xff0c;此专栏你将学习到以下内容&#xff1a; 1&#xff09;音视频的解封装、解码&#xff1b; 2&#xff09;Qtopengl如何渲染视频&#…

【设计数据密集型应用】复制

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱敲代码的小黄&#xff0c;阿里淘天Java开发工程师&#xff0c;CSDN博客专家&#x1f4d5;系列专栏&#xff1a;Spring源码、Netty源码、Kafka源码、JUC源码、dubbo源码系列&#x1f525;如果感觉博主的文章还不错的话…

Pycharm+Selenium WebdriverPython自动化测试

&#x1f525; 交流讨论&#xff1a;欢迎加入我们一起学习&#xff01; &#x1f525; 资源分享&#xff1a;耗时200小时精选的「软件测试」资料包 &#x1f525; 教程推荐&#xff1a;火遍全网的《软件测试》教程 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1…

Windows下CMake使用PCL提示全局作用域没有_open等文件读写函数

表现 解决办法 在导入PCL之前导入Windows SDK相关头文件: #if _WIN32 #include <corecrt_io.h> #endif