首页 > 其他分享 >【OJ】任意日期是星期几

【OJ】任意日期是星期几

时间:2024-03-12 18:23:20浏览次数:34  
标签:星期 OJ int sum month year 31 任意 day

#include <iostream>
#include <string>
#include <vector>
using namespace std;
class Solution {
public:
    string dayOfTheWeek(int day, int month, int year)
    {
        int num_of_day = GetDayBetweenYears(1971, year) + GetDayBetweenMonths(year, 1, month) + day - 1;
        return WEEKDAY[num_of_day % 7];
    }

private:
    int GetDayBetweenYears(const int first, const int second)
    {
        int sum = 0;
        for (int i = first; i < second; i++) {
            if (IsLeapYear(i)) {
                sum += days_leap;
            } else {
                sum += days_common;
            }
        }
        return sum;
    }
    int GetDayBetweenMonths(const int year, const int first, const int second)
    {
        int sum = 0;
        for (int i = first; i < second; i++) {
            sum += month_day[i];
        }
        if (second > 2 && IsLeapYear(year)) {
            sum += 1;
        }
        return sum;
    }
    bool IsLeapYear(const int i)
    {
        return (i % 400 == 0 || (i % 4 == 0 && i % 100 != 0));
    }
    constexpr static int epoch_year = 1971;
    constexpr static int epoch_mon = 1;
    constexpr static int epoch_day = 1;
    constexpr static int days_leap = 366;
    constexpr static int days_common = 365;
    vector<string> WEEKDAY{"Friday", "Saturday", "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday"};
    vector<int> month_day{0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
};
int main()
{
    int year = 0;
    int month = 0;
    int day = 0;
    cout << "Input year:" << endl;
    cin >> year;
    cout << "Input month:" << endl;
    cin >> month;
    cout << "Input day:" << endl;
    cin >> day;
    Solution a;
    cout << a.dayOfTheWeek(day, month, year);
    return 0;
}

标签:星期,OJ,int,sum,month,year,31,任意,day
From: https://blog.csdn.net/CSUzhangpeike/article/details/136659561

相关文章

  • 树链剖分【loj模板】(〃>目<)
    小声吐槽:如果不是拍了200000组没问题后瞪眼瞪出来了,我才不写呢Decribe:给定一棵\(n\)个节点的树,初始时该树的根为\(1\)号节点,每个节点有一个给定的权值。下面依次进行\(m\)个操作,操作分为如下五种类型:换根:将一个指定的节点设置为树的新根。修改路径权值:给定两个节点......
  • win10在任意位置安装Linux子系统
    1.把WSL1设置为默认版本以管理员身份打开Powershell,输入命令wsl--set-default-version12.启用适用于Linux的Windows子系统控制面板--程序--程序和功能--启用或关闭Windows功能选中适用于Linux的Windows子系统,确定完成后重启生效3.下载WSLLinux手动安装包选择Linux版本,下载......
  • ojdbc8.jar下载
    由于oracle的版权问题,java连接oracle的jar(ojdbc.jar)在maven的中央仓库下载不到。1.手动下载jar包ojdbc8.jar官网下载地址:https://www.oracle.com/database/technologies/jdbc-ucp-122-downloads.html2.以管理员身份打开cmd并切换到ojdbc8.jar目录下(或者直接找到此目录,输入cm......
  • Python 列表中任意字符串是否存在的判断
    `importsysjudge_string=[]target_string=sys.argvjudge_string=['-?','/?','--?','-help','--help','help']target_string=sys.argvjudge_result=any(wordifwordintarget_stringelseFals......
  • 杭电OJ 2054 A==B?
    A==B?题目只要你判断数字A是否等于B,傻子都知道肯定不是int数据类型可以存下的,A可能有1000位,要用字符串类型存储,比较的时候注意\(0001\)、\(001\)、\(1\)都是一样的,即前导零不算好吧,题目只说了number,没说是整数呀分析:比较前,先去掉前面多余的0,再去小数点后面多余的0(首先要保......
  • 杭电OJ递推系列的题目
    1.2047阿牛的EOF牛肉串阿牛的EOF牛肉串分析:对于这种递推求解的题目无非分为两种递推方式:(1)从前往后递推(2)从后往前递推这道题用从后往前递推比较好,因为题目中的限制条件为禁止出现O相邻的情况,所以通过定后一项的值来判断前一项的取值比较容易。参考资料PS:这种题目难点就......
  • 知道年月日,周几,请算出某个月零某天后是星期几,距离现在多少天(请用代码实现,谢绝调用 API
    //定义一周的中文名称publicstaticString[]week={"星期日","星期一","星期二","星期三","星期四","星期五","星期六"};//定义平年每月天数publicstaticint[]monthday1={0,31,28,31,30,31,30,31,31,30,31,30,31};//定义闰年......
  • 杭电OJ 2048 完全错排的可能性
    神、上帝以及老天爷/*人数从1到4写手动模拟找出递推规律:总体上就是得出n的完全错排方案个数,然后除以n!即可;关键是求n的完全错排方案个数;第n个人可以选取前n-1个人中任意一个人的字条,第n个人有n-1种选择,假设第n个人取到的是第i个人的字条,1.这时i可以保留第n个人的字条,剩余的......
  • POJ--3258 River Hopscotch(二分搜索/最大化最小值)
    记录10:232023-3-11http://poj.org/problem?id=3259二分法查找最大的可能解,检查x是否符合条件(当前这个位置上的值-前上一个选取位置的值>=x)注意的点:使用了[begin,end)的左闭右开区间,所以结果要begin-1,end要从L+1开始算点击查看代码intL,N,M;introcks[5......
  • 杭电OJ 2039三角形
    三角形这题主要是判定三角形。根据三角形的性质,三条边能够组成一个三角形的条件是任意两边之和大于第三边。因此,可以通过以下步骤来判定:1.将三条边按非递减顺序排序;2.如果最短的两条边之和大于最长的边,则这三条边能够组成一个三角形;否则,不能组成。注意:题目说是三个正......