KY18 今年的第几天?

KY18 今年的第几天?

⭐️难度:中等

⭐️知识点:模拟

📖题目:

📚题解1:自己做

cpp 复制代码
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>

using namespace std;

void count(int year, int month, int day) {
    int dayOfMonth[] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
    int isLeap;  // 是否是闰年
    if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) {  // 闰年二月29天
        dayOfMonth[2] = 29;
    }
    int sum = 0; // 记录第几天
    for (int i = 1;i < month;i++) {
        sum = sum + dayOfMonth[i];
    }
    sum = sum + day;
    printf("%d\n", sum);
}

int main() {
    int year = 0 ;
    int month = 0;
    int day = 0;
    while (scanf("%d%d%d",&year,&month,&day) != EOF) {
        count(year, month, day);
    }
    

    return 0;
}

📚题解2:利用NextDay函数

cpp 复制代码
#include <stdio.h>
    using namespace std;
    void NextDay(int &year, int &month, int &day) {
        // & 出现在定义or形参当中 表示引用的意思 出现在其他位置,表示取地址
        // 存储一下 月份和天数的对应关系
        int dayOfMonth[] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
        int isLeap; // 是否是闰年 
        isLeap = year % 400 == 0 || year % 4 == 0 && year % 100 != 0;
        if (isLeap) {
            dayOfMonth[2] = 29;
        }
        else {
            dayOfMonth[2] = 28;
        }
    
        ++day;
        if (day > dayOfMonth[month]) {
            day = 1;
            ++month;
        }
        if (month > 12) {
            month = 1;
            ++year;
        }
        //printf("NextDay year = %d, month = %d, day = %d\n", year, month, day);
    }
    //int main() {
    //	int year = 1900;
    //	int month = 2;
    //	int day = 28;
    //	NextDay(year, month, day);
    //	printf("main year = %d, month = %d, day = %d\n", year, month, day);
    //	return 0;
    //}
    int main() {
        int year, month, day;
        while (scanf("%d%d%d", &year, &month, &day) != EOF) {
            int next = 1; // NextDay执行的次数
            int curmonth = 1;
            int curday = 1;
            while (1) {
                if (month == curmonth && day == curday) {
                    break;
                }
                NextDay(year, curmonth, curday);
                ++next;
            }
            printf("%d\n", next);
        }
        return 0;
    }
相关推荐
Tisfy15 小时前
LeetCode 3740.三个相等元素之间的最小距离 I:今日先暴力,“明日“再哈希
算法·leetcode·哈希算法·题解·模拟·遍历·暴力
Q741_1472 天前
每日一题 3740. 三个相等元素之间的最小距离 I 3741. 三个相等元素之间的最小距离 II 模拟 哈希表 C++ 题解
c++·算法·leetcode·模拟·数组·哈希表
Q741_1472 天前
每日一题 力扣 3655. 区间乘法查询后的异或 II 模拟 分治 乘法差分法 快速幂 C++ 题解
c++·算法·leetcode·模拟·快速幂·分治·差分法
Q741_1474 天前
每日一题 力扣 3653. 区间乘法查询后的异或 I 模拟 数学 位运算 C++ 题解
c++·数学·算法·leetcode·力扣·模拟
Q741_14711 天前
每日一题 力扣 2751.机器人碰撞 映射 模拟 栈 C++ 题解
算法·leetcode·模拟··映射
A923A14 天前
【洛谷刷题 | 第七天】
算法·模拟·洛谷
浮白载笔的夜晚16 天前
【Virtuoso】PVT工艺角配置问题
学习·模拟·virtuoso
Q741_14716 天前
每日一题 力扣 2946. 循环移位后的矩阵相似检查 力扣 155. 最小栈 数学 数组 模拟 C++ 题解
c++·算法·leetcode·矩阵·模拟·数组·
Tisfy21 天前
LeetCode 1886.判断矩阵经轮转后是否一致:模拟
算法·leetcode·矩阵·题解·模拟
Tisfy22 天前
LeetCode 3643.垂直翻转子矩阵:原地修改
算法·leetcode·矩阵·模拟