王道机试C++第一章:暴力求解-模拟篇 日期问题 Day25

news/2024/7/20 17:02:28 标签: 华为od, 算法, c++, 开发语言, 数据结构, 学习

2、日期问题

日期类运算的各种问题同样被频繁地选入机试考题中,但这类问题通常都有规律可循。只
要能够把握这类问题题面中的核心规律,求解这类问题就不会有太大的难度
关键:1、数组;2、循环;---->熟练调试代码
1)year 是否是闰年:year%400==0 || year%100!=0 && year%4==0 (eg:2014,注意&&的优先级高于|| )
2)月中有多少天:辅助数组把月份提前输入 eg:mday [13]={......} 空间换时间

今年的第几天?(清华复试上机)

题目描述:
输入年、月、日,计算该天是本年的第几天。
输入: 包括 3 个整数:年( 1<= Y <=  3000 )、月( 1 <=   M <=  12 )、日( 1 <=   D <=   31 )。
输出: 输入可能有多组测试数据,对于每组测试数据,
输出一个整数,代表 Input 中的年、月、日对应本年的第几天。
样例输入: 1990 9 20
                   2000 5 1
样例输出: 263 
                   122
代码表示:
#include <iostream>
using namespace std;

int main() {
	int year,mon,day;
    int mday[13]={0,31,28,31,30,31,31,30,31,30,31};
	int totalDay[13]={0};
	for(int mon=2;mon<=12;++mon){
	//到mon月1日的天数=到mon-1月1日的天数+第mon-1月的天数 
		totalDay[mon]=totalDay[mon-1]+mday[mon-1];	
	}
	while(scanf("%d%d%d",&year,&mon,&day)!=EOF){
		//如果是闰年
		bool isleap=year%400==0||year%100!=0&&year%4==0;
		if(isleap==true && mon>=3){//对超过2月的有影响
		printf("%d\n",totalDay[mon]+day+1); 
		}
		else{
			printf("%d\n",totalDay[mon]+day);
		}
	}
  }

打印日期(华中科技大学复试上机题)

题目描述:
给出年份 m 和一年中的第 n 天,算出第 n 天是几月几号。
输入: 输入包括两个整数:y 1 <=   y <=  3000 )和 n 1 <=  n <=  366 )。
输出: 可能有多组测试数据,对于每组数据,
按格式 yyyy-mm-dd 将输入中对应的日期打印出来。
样例输入:
2000 3
2000 31
2000 40
2000 60
2000 61
2001 60
样例输出:
2000-01-03
2000-01-31
2000-02-09
2000-02-29
2000-03-01
2001-03-01
注意:
代码表示
#include <iostream>
using namespace std;

int main(){
	int year,n;
	int mday[13]={0,31,28,31,30,31,31,30,31,30,31};
	while(scanf("%d%d",&year,&n)!=EOF){
	    int mon=1;
		int day=1;
		for(int i=0;i<n;++i){
			bool isleap=year%400==0||year%100!=0&&year%4==0;
			if(isleap){
				mday[2]=29;
			}
			else{
				mday[2]=28;
			}
			//下一天
			++day;
			if(day>mday[mon]){//到了32号了 
				++mon;
				day=1;
				if(mon>12){//到了13月 
					mon=1;
					++year;
				}
			} 
		}
		printf("%4d-%02d-%02d\n",year,mon,day);	
	}
}

日期累加(北京理工大学复试上机题)

题目描述:
设计一个程序,它能够计算一个日期加上若干天后是什么日期。
输入: 输入第一行表示样例个数 m ,接下来的 m 行中,每行 4 个整数,分别表示年、月、日和累加的天数。
输出: 输出 m 行,每行按 yyyy-mm-dd 的个数输出。
样例输入:
1
2008 2 3 100
样例输出:
2008-05-13
代码表示:
#include <iostream>
#include <cstdio>
using namespace std;

int daytab[2][13] = {
    {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}, // 普通年每个月的天数
    {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}  // 闰年每个月的天数
};

bool IsLeapYear(int year) {
    return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}

int NumberOfYear(int year) { //返回该年天数
    if (IsLeapYear(year)) {
        return 366;
    } else {
        return 365;
    }
}

int main() {
    int year, month, day;
    int number; //记录天数
    int caseNumber; //组数
    scanf("%d", &caseNumber); // 输入组数
    while (caseNumber--) {
        scanf("%d%d%d%d", &year, &month, &day, &number); // 输入年、月、日和天数
        int row = IsLeapYear(year);
        for (int j = 0; j < month; ++j) {
            number += daytab[row][j]; // 计算给定日期在一年中的天数
        }
        number += day;
        while (number > NumberOfYear(year)) { //确定年
            number -= NumberOfYear(year);
            year++;
        }
        month = 1; // 修正月份从1开始
        row = IsLeapYear(year);
        while (number > daytab[row][month]) { //确定月
            number -= daytab[row][month];
            month++;
        }
        day = number; //确定日
        printf("%04d-%02d-%02d\n", year, month, day); // 输出日期
    }
    return 0;
}


http://www.niftyadmin.cn/n/5407600.html

相关文章

Python教程——最后一波来喽

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 1.使用__slots__2. property3.多重继承 4.定制类5.枚举类6.错误处理7.调试8. 文档测试9.单元测试10. 文件读写11. StringIO和BytesIO12. 操作文件和目录13.序列化14…

lv20 QT事件5

1 事件模型 2 事件处理 virtual void keyPressEvent(QKeyEvent *event) virtual void keyReleaseEvent(QKeyEvent *event) virtual void mouseDoubleClickEvent(QMouseEvent *event) virtual void mouseMoveEvent(QMouseEvent *event) virtual void mousePressEvent(QMou…

Java 面试中最高频的 20% 知识点

在Java面试中&#xff0c;有一些知识点是经常被问及的&#xff0c;它们构成了面试的核心。 以下是Java面试中最高频的那20%知识点的详细讲解&#xff1a; 1. Java基础 1.1 数据类型 Java中有八种基本数据类型&#xff1a;byte、short、int、long、float、double、char、boo…

【C语言】算术运算符

C语言算术运算符&#xff0c;加、减、乘、比较简单&#xff0c;主要需要注意有除法和取余两个&#xff0c;以及前自增和前自增&#xff0c;减法类似。 运算符 术语 示例 结果 加 10 5 15 - 减 10 - 5 5 * 乘 10 * 5 50 / 除 10 / 5 2 % 取模(取余) 10 …

【MySQL 系列】在 Ubuntu 上安装 MySQL

Ubuntu 是一个使用非常广泛的 Linux 发行版。Ubuntu Server 则是云上最流行的服务器操作系统。本篇文章中&#xff0c;我们展示了在 Ubuntu 上安装 MySQL 8 的详细步骤。 文章目录 1、先决条件2、在 Ubuntu 中安装 MySQL2.1、更新软件仓库包索引2.2、升级本地软件2.3、配置 MyS…

Webserve(3): HTTP解析

http_conn::HTTP_CODE http_conn::parse_content( char* text ) {if ( m_read_idx > ( m_content_length m_checked_idx ) ){text[ m_content_length ] \0;return GET_REQUEST;}return NO_REQUEST; }这段代码是处理 HTTP 请求消息体&#xff08;Content&#xff09;的函数…

Ubuntu20安装zabbix-agent2,对接zabbix 6.4

在Ubuntu 20.04 LTS上安装Zabbix Agent 2并与Zabbix Server 6.4对接&#xff0c;请按照以下步骤操作&#xff1a; 更新系统&#xff1a; sudo apt update sudo apt upgrade 添加Zabbix官方仓库&#xff1a; 首先&#xff0c;需要将Zabbix的官方存储库添加到你的系统中以获取Za…

MongoDB-索引-部分索引

部分索引是 MongoDB 中一种特殊类型的索引&#xff0c;它只包含满足特定条件的文档。这种索引只包含符合给定查询条件的文档的引用&#xff0c;而不是整个集合。部分索引可以帮助减小索引的大小&#xff0c;提高查询性能&#xff0c;并且只在需要时使用。 1. 创建部分索引 要…