九度OJ 1043:Day of Week(星期几) (日期计算)

2024-04-02 02:38

本文主要是介绍九度OJ 1043:Day of Week(星期几) (日期计算),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

时间限制:1 秒

内存限制:32 兆

特殊判题:

提交:5349

解决:1923

题目描述:

We now use the Gregorian style of dating in Russia. The leap years are years with number divisible by 4 but not divisible by 100, or divisible by 400.
For example, years 2004, 2180 and 2400 are leap. Years 2004, 2181 and 2300 are not leap.
Your task is to write a program which will compute the day of week corresponding to a given date in the nearest past or in the future using today’s agreement about dating.

输入:

There is one single line contains the day number d, month name M and year number y(1000≤y≤3000). The month name is the corresponding English name starting from the capital letter.

输出:

Output a single line with the English name of the day of week corresponding to the date, starting from the capital letter. All other letters must be in lower case.

样例输入:
9 October 2001
14 October 2001
样例输出:
Tuesday
Sunday
提示:

Month and Week name in Input/Output:
January, February, March, April, May, June, July, August, September, October, November, December
Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday

来源:
2008年上海交通大学计算机研究生机试真题

思路:

日期计算类的题目不少,虽然不难,但容易出错。

需要注意的地方主要是闰年的计算。

一般的年是365天,二月是28天,而闰年则366天,2月是29天。

闰年的划定标准是:400的倍数,或者4的倍数但不是100的倍数。


代码:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>#define N 10int compare(int y[2], int m[2], int d[2])
{if (y[0] != y[1])return y[0]-y[1];else if (m[0] != m[1])return m[0]-m[1];else if (d[0] != d[1])return d[0]-d[1];elsereturn 0;
}void swap(int a[2])
{int tmp;tmp = a[0];a[0] = a[1];a[1] = tmp;
}int days(int y, int m, int d)
{int count = 0;//printf("y=%d, m=%d, d=%d\n", y, m, d);count += y*365;count += (y-1)/4+1;count -= (y-1)/100+1;count += (y-1)/400+1;//printf("count=%d\n", count);if (m > 1)count += 31;if (m > 2){if ((y%4 == 0 && y%100 != 0) || y%400 == 0)count += 29;elsecount += 28;}if (m > 3)count += 31;if (m > 4)count += 30;if (m > 5)count += 31;if (m > 6)count += 30;if (m > 7)count += 31;if (m > 8)count += 31;if (m > 9)count += 30;if (m > 10)count += 31;if (m > 11)count += 30;if (m > 12)count += 31;//printf("count=%d\n", count);count += d;//printf("count=%d\n", count);return count;
}int month(char s[])
{char a[12][20] = {"January", "February", "March", "April","May", "June", "July", "August","September", "October", "November", "December"};int i;for (i=0; i<12; i++){if (strcmp(s, a[i]) == 0)break;}   return i+1;
}   void pweek(int w1)
{   char s[7][10] = {"Sunday", "Monday", "Tuesday", "Wednesday","Thursday", "Friday", "Saturday"};printf("%s\n", s[w1]);
}   int main(void)
{       char s[N];int y[2], m[2], d[2], w[2];y[0] = 2001; m[0] = 10;d[0] = 9; w[0] = 2;while (scanf("%d%s%d", &d[1], s, &y[1]) != EOF){m[1] = month(s);w[1] = w[0];int cmp = compare(y, m, d);if (cmp < 0){w[1] = (w[0] + days(y[1], m[1], d[1])- days(y[0], m[0], d[0])) % 7;}else if (cmp > 0){w[1] = (w[0] + 7 - (days(y[0], m[0], d[0])- days(y[1], m[1], d[1])) % 7) % 7;}           pweek(w[1]);}return 0;
}       
/**************************************************************Problem: 1043User: liangrx06Language: CResult: AcceptedTime:0 msMemory:916 kb
****************************************************************/


这篇关于九度OJ 1043:Day of Week(星期几) (日期计算)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/868752

相关文章

day-51 合并零之间的节点

思路 直接遍历链表即可,遇到val=0跳过,val非零则加在一起,最后返回即可 解题过程 返回链表可以有头结点,方便插入,返回head.next Code /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}*

poj 1113 凸包+简单几何计算

题意: 给N个平面上的点,现在要在离点外L米处建城墙,使得城墙把所有点都包含进去且城墙的长度最短。 解析: 韬哥出的某次训练赛上A出的第一道计算几何,算是大水题吧。 用convexhull算法把凸包求出来,然后加加减减就A了。 计算见下图: 好久没玩画图了啊好开心。 代码: #include <iostream>#include <cstdio>#inclu

uva 1342 欧拉定理(计算几何模板)

题意: 给几个点,把这几个点用直线连起来,求这些直线把平面分成了几个。 解析: 欧拉定理: 顶点数 + 面数 - 边数= 2。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#inc

uva 11178 计算集合模板题

题意: 求三角形行三个角三等分点射线交出的内三角形坐标。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#include <stack>#include <vector>#include <

XTU 1237 计算几何

题面: Magic Triangle Problem Description: Huangriq is a respectful acmer in ACM team of XTU because he brought the best place in regional contest in history of XTU. Huangriq works in a big compa

音视频入门基础:WAV专题(10)——FFmpeg源码中计算WAV音频文件每个packet的pts、dts的实现

一、引言 从文章《音视频入门基础:WAV专题(6)——通过FFprobe显示WAV音频文件每个数据包的信息》中我们可以知道,通过FFprobe命令可以打印WAV音频文件每个packet(也称为数据包或多媒体包)的信息,这些信息包含该packet的pts、dts: 打印出来的“pts”实际是AVPacket结构体中的成员变量pts,是以AVStream->time_base为单位的显

计算数组的斜率,偏移,R2

模拟Excel中的R2的计算。         public bool fnCheckRear_R2(List<double[]> lRear, int iMinRear, int iMaxRear, ref double dR2)         {             bool bResult = true;             int n = 0;             dou

Linux基础入门 --9 DAY

文本处理工具之神vim         vi和vim简介 一、vi编辑器 vi是Unix及类Unix系统(如Linux)下最基本的文本编辑器,全称为“visual interface”,即视觉界面。尽管其名称中包含“visual”,但vi编辑器实际上工作在字符模式下,并不提供图形界面。vi编辑器以其强大的功能和灵活性著称,是Linux系统中不可或缺的工具之一。 vi编辑器具有三种主要的工作模

day-50 求出最长好子序列 I

思路 二维dp,dp[i][h]表示nums[i] 结尾,且有不超过 h 个下标满足条件的最长好子序列的长度(0<=h<=k),二维数组dp初始值全为1 解题过程 状态转换方程: 1.nums[i]==nums[j],dp[i,h]=Math.max(dp[i,h],dp[j,h]+1) 2.nums[i]!=nums[j],dp[i,h]=Math.max(dp[i,h],dp[j,h-1

javaScript日期相加减例子

当前时间加上2天 var d = new Date(“2015-7-31”); d.setDate(d.getDate()+2); var addTwo=d.getFullYear()+”年”+(d.getMonth()+1)+”月”+d.getDate()+”日”; “控制台输出===============”+”当前日期加2天:”+addTwo; 使用这种方法,月份也会给你计算.