c语言13号星期几,用pascal求这一年中每个月的13号是星期几
满意答案
ojus52
2013.07.17
采纳率:56% 等级:12
已帮助:2995人
分析
按月为单位计算,模拟运算,1900年1月13日是星期六(代号1),下个月的13日就是代号(1+31-1) mod 7+1的星期。
因为数据小,所以不会超时。
当数据比较大时,可以以年为单位计算,每年为365天,mod 7的余数是1,就是说每过一年所有的日和星期错一天,闰年第1、2月错1天,3月以后错2天。这样,只要先求出第一年的解,错位添加到以后的年即可。
详细分析:因为1900.1.1是星期一,所以1900.1.13就等于(13-1) mod7+1=星期六。这样讲可能不太清楚。那么,我来解释一下:每过7天是一个星期。n天后是星期几怎么算呢?现在假设n是7的倍数,如果n为14,那么刚好就过了两个星期,所以14天后仍然是星期一。但如果是过了15天,那么推算就得到是星期二。这样,我们就可以推导出一个公式来计算。(n天 mod 7(一个星期的天数)+ 现在日期的代号) mod 7 就等于现在日期的代号。当括号内的值为7的倍数时,其代号就为0,那么,此时就应该是星期日这样,我们可以得出题目的算法:
int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}
int b[8]={0}
a数组保存一年12个月的天数(因为C语言中数组起始下标为0,所以这里定义为13)。
b数组保存星期一到星期日出现的天数。用date记录目前是星期几的代号,然后用两个循环,依次加上所经过的月份的天数,就出那个月是星期几,当然,要注意判断闰年!知道了这个方法,实现起来就很容易了。
注意考虑闰月的情况。
最后注意要换行,否则会错误。
还可利用蔡勒公式
源代码
方法1
{不用蔡勒公式}
program five001;
var
wk:array[0..6]of Longint;
n,i,j,x,s,days,nk,m:Longint;
begin
assign(input,'friday.in');reset(input);
assign(output,'friday.out');rewrite(output);
readln(n);
nk:=1;m:=0;x:=13 mod 7;
for i:= 1900 to 1900+n-1 do
begin
for j:= 1 to 12 do
begin
case j of
1,3,5,7,8,10,12 :days:=31;
4,6,9,11 :days:=30;
2 :if (i mod 4 = 0)and(i mod 100 <> 0)or(i mod 400 = 0)
then days:=29
else days:=28;
end;
wk[(x+nk-1) mod 7]:=wk[(x+nk-1) mod 7]+1;
m:=days mod 7;
s:=nk;
if s+m=7 then nk:=7;
nk:=(m+s) mod 7;
end;
end;
writeln(wk[6],' ',wk[0],' ',wk[1],' ',wk[2],' ',wk[3],' ',wk[4],' ',wk[5]);
close(input);close(output);
end.
方法2
{根据蔡勒公式写的代码。}
var
n,i,j,year,m,c,y,w :longint;
a :array[0..6] of longint;
begin
Assign(input,'Friday.in');reset(input);
Assign(output,'Friday.out');rewrite(output);
readln(n);
for i:=1900 to 1899+n do
for j:=1 to 12 do
begin
year:=i;
m:=j;
if (m=1)or(m=2) then
begin
dec(year);
m:=m+12;
end;
c:=year div 100;
y:=year mod 100;
w:=(y+ y div 4 + c div 4 -2*c+ 26*(m+1) div 10 +13 -1) mod 7;
w:=(w+7) mod 7;
inc(a[w]);
end;
writeln(a[6],' ',a[0],' ',a[1],' ',a[2],' ',a[3],' ',a[4],' ',a[5]);
Close(input);close(output);
halt;
end.
35分享举报
c语言13号星期几,用pascal求这一年中每个月的13号是星期几相关推荐
- c语言编程彩票中奖30选7,中国福利彩票30选7(七乐彩)中奖号码表
七乐彩上市以来已中出1222注百万超值一等奖! 全国联销 每周一.三.五北京开奖 01 02 03 04 05 06 07 08 09 ...
- C语言怎么计算任意一天事星期几,怎么计算任意一年某个月的第一天是星期几...
满意答案 bsb3159352 2016.07.12 采纳率:53% 等级:10 已帮助:1218人 脚本之家 首页应用手游攻略教程 ﹤首页 → 网络编程 → JavaScript → 基础知识 ...
- 13个人围成一圈,从第1个人开始顺序报号1,2,3.凡报到3者退出圈子。找出最后留在圈子中的人原来的序号。要求用链表实现。
13个人围成一圈,从第1个人开始顺序报号1,2,3.凡报到3者退出圈子.找出最后留在圈子中的人原来的序号.要求用链表实现. #include <stdio.h> #include < ...
- 13个人围成一圈,从第1个人开始顺序报号1、2、3,凡报到3的人退出圈子。找出最后留在圈子里的人原来的序号。
[绕圈报数] 1130 更新 ======== 一般化情况 13个人围成一圈,从第1个人开始顺序报号1.2.3,凡报到3的人退出圈子.找出最后留在圈子里的人原来的序号. 输出提示 "出圈成员 ...
- 13个人围成一圈,从第1个人开始顺序报号1,2,3。 凡报到3者退出圈子
#include <stdio.h> #include <stdlib.h> #define N 13 /* 13个人围成一圈,从第1个人开始顺序报号1,2,3. 凡报到3者退 ...
- 批量关闭公众号推送_微信推出“一键拒收”长期未读公众号推送功能
近期已经写了不少关于微信的消息了,本来想换个话题休息一下,谁知道微信不休息啊,又开始内测了.7月25日,部分iOS内测微信用户会收到系统对长时间未读订阅号的提醒,并可通过提醒入口选择不接收这部分订阅号 ...
- python输入一个正整数n求下列算式的值_C语言编写程序:输入一个正整数x和一个正整数n,求下列算式的值。,C语言 编写一个程序,输入一个正整数,求出它是几位数。...
导航:网站首页 > C语言编写程序:输入一个正整数x和一个正整数n,求下列算式的值.,C语言 编写一个程序,输入一个正整数,求出它是几位数. C语言编写程序:输入一个正整数x和一个正整数n,求下 ...
- 怎么用c语言表示大整数的四则运算,用c语言编写大整数的四则运算,求大神
用c语言编写大整数的四则运算,求大神 答案:3 信息版本:手机版 解决时间 2019-10-03 17:13 已解决 2019-10-03 01:32 用c语言编写大整数的四则运算,求大神 最佳答案 ...
- php熊掌号怎么设置json-ld,dedecms织梦系统怎么对接百度熊掌号并添加JSON_LD数据
dedecms织梦系统怎么对接百度熊掌号并添加JSON_LD数据? 百度推出的百度熊掌号非常的不错,我的dedecms织梦系统早早就对接好了,它能对你的原创文章进行原创保护,并评出熊掌号搜索指数,熊掌 ...
最新文章
- 数据库连接类 DB.class.php
- 怎么计算一组数据的波动_数据分析(一):数据描述统计
- pyotrch nn.Conv2d中groups参数的理解
- HDU 3046 Pleasant sheep and big big wolf 最小割
- 三维重建:深度相机方案对比-KinectFusion的基本原理(尺度)
- Python: 编程遇到的一些问题以及网上解决办法?
- 静态 动态 强类型 弱类型语言的区别
- 学校计算机考察内容是什么意思,2019考研计算机复试四项考察内容分析及注意事项...
- matlab2016一条命令设置坐标轴标签旋转角度、字体大小和字体!
- [渝粤教育] 西南科技大学 政治经济学 在线考试复习资料
- CAD如何导出天正各版本DWG图纸?CAD图形导出教程
- FileZilla Server1.5使用入门
- FMEA在汽车开发过程中的实施-SunFMEA
- uni-app - 解决 H5 微信公众号授权登录后,无法回退到 “上一页“ 的问题(微信登录后如何返回到触发它的那一页?无法通过 uni.navigateBack() 返回到前一页的问题?)详细教程
- Picasso加载圆形图片和圆角图片
- 泰山OFFICE技术讲座:中英文间隔,间隔以哪个字体为准?
- Flink 教程 gitbook 从入门到入土(详细教程)
- python如何分析高频词_python数据分析高频词提取,pyecharts词云制作并保存
- 物联网到底是什么,生活中能用得上吗?
- 大数据信息资料采集:视频信息采集及评论内容爬取八爪鱼采集规则