ACM:日历本
题目描述
我们经常需要使用日历,所以需要一个能生成日历的程序。
先要求你写一个程序,只需要输入年份,就能生成正确的日历。
输入
输入包含多组测试数据。每组输入一个整数Y(1800<=Y<=2100),表示公元年份。
输出
对于每组输入,输出对应的日立本。选中下面的输出样例查看具体的输出格式,注意空格的输出。
样例输入
2010
样例输出
2010 January February March
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa
1 2 1 2 3 4 5 6 1 2 3 4 5 6
3 4 5 6 7 8 9 7 8 9 10 11 12 13 7 8 9 10 11 12 13
10 11 12 13 14 15 16 14 15 16 17 18 19 20 14 15 16 17 18 19 20
17 18 19 20 21 22 23 21 22 23 24 25 26 27 21 22 23 24 25 26 27
24 25 26 27 28 29 30 28 28 29 30 31
31
April May June
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa
1 2 3 1 1 2 3 4 5
4 5 6 7 8 9 10 2 3 4 5 6 7 8 6 7 8 9 10 11 12
11 12 13 14 15 16 17 9 10 11 12 13 14 15 13 14 15 16 17 18 19
18 19 20 21 22 23 24 16 17 18 19 20 21 22 20 21 22 23 24 25 26
25 26 27 28 29 30 23 24 25 26 27 28 29 27 28 29 30
30 31
July August September
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa
1 2 3 1 2 3 4 5 6 7 1 2 3 4
4 5 6 7 8 9 10 8 9 10 11 12 13 14 5 6 7 8 9 10 11
11 12 13 14 15 16 17 15 16 17 18 19 20 21 12 13 14 15 16 17 18
18 19 20 21 22 23 24 22 23 24 25 26 27 28 19 20 21 22 23 24 25
25 26 27 28 29 30 31 29 30 31 26 27 28 29 30 October November December
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa
1 2 1 2 3 4 5 6 1 2 3 4
3 4 5 6 7 8 9 7 8 9 10 11 12 13 5 6 7 8 9 10 11
10 11 12 13 14 15 16 14 15 16 17 18 19 20 12 13 14 15 16 17 18
17 18 19 20 21 22 23 21 22 23 24 25 26 27 19 20 21 22 23 24 25
24 25 26 27 28 29 30 28 29 30 26 27 28 29 30 31
31
这题就是考格式化输出,大致思路:
每次输出三个月,三个月里能放日期的位置有:7x6x3=126个,所以开这么大的一维int数组,全部置零,把每个月应该的日期写入相应的位置(一月第一行、二月第一行、三月第一行、一月第二行、二月第二行...),然后输出,每21个数换行。输出是依次输出,写入是间隔写入。
输出时注意把之前的0换成空格,每个数之间有空格,每七个数之间两个空格。
注意闰年的写入。如果用到全局变量需特别注意修改完后对下次输入的影响。
参考代码:
#include<stdio.h>
#include<string.h>
int rili[200];//每三个月所有日期存在这里
int monthnumber[12]={31,28,31,30,31,30,31,31,30,31,30,31};
char skr[100]="Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa";
int insert(int year,int month);
int getweek(int year,int month,int day); int main(){
int year,day,week,number,i; while(scanf("%d",&year)!=EOF){ if(year%4==0&&year%100!=0||year%400==0){//判断是否闰年
monthnumber[1]=29;
}
else{
monthnumber[1]=28;
} printf(" %d ",year);
printf("\n\n");
puts(" January February March ");
puts(skr);
memset(rili,0,sizeof(rili)); for(i=1;i<=3;i++){
insert(year,i);
}
for(i=1;i<=126;i++){
rili[i-1]>0?printf("%2d",rili[i-1]):printf(" ");
if(i%21==0)
putchar(10);
else if(i%7==0)
printf(" ");
else
putchar(' ');
} puts(" April May June ");
puts(skr);
memset(rili,0,sizeof(rili));
for(i=4;i<=6;i++){
insert(year,i);
}
for(i=1;i<=126;i++){
rili[i-1]>0?printf("%2d",rili[i-1]):printf(" ");
if(i%21==0)
putchar(10);
else if(i%7==0)
printf(" ");
else
putchar(' ');
}
puts(" July August September ");
puts(skr);
memset(rili,0,sizeof(rili));
for(i=7;i<=9;i++){
insert(year,i);
}
for(i=1;i<=126;i++){
rili[i-1]>0?printf("%2d",rili[i-1]):printf(" ");
if(i%21==0)
putchar(10);
else if(i%7==0)
printf(" ");
else
putchar(' ');
}
puts(" October November December ");
puts(skr);
memset(rili,0,sizeof(rili));
for(i=10;i<=12;i++){
insert(year,i);
}
for(i=1;i<=126;i++){
rili[i-1]>0?printf("%2d",rili[i-1]):printf(" ");
if(i%21==0)
putchar(10);
else if(i%7==0)
printf(" ");
else
putchar(' ');
}
}
return 0;
} int getweek(int year,int month,int day){//蔡勒公式-判断某天是星期几
if(month==1||month==2){
year--;
month+=12;
}
int c=year/100;
int y=year-c*100;
int week=(c/4)-2*c+(y+y/4)+(13*(month+1)/5)+day-1;
while(week<0){
week+=7;
}
week%=7;
return week;
}
int insert(int year,int month){//写入日期
int number=1;
int week,i; week=getweek(year,month,1);
for(i=week+((month-1)%3)*7;i<126&&number<=monthnumber[month-1];i++){
if(i%7==0&&i!=week+((month-1)%3)*7)
i+=14; rili[i]=number++;
}
return 0;
}
ACM:日历本的更多相关文章
- SCNU ACM 2016新生赛决赛 解题报告
新生初赛题目.解题思路.参考代码一览 A. 拒绝虐狗 Problem Description CZJ 去排队打饭的时候看到前面有几对情侣秀恩爱,作为单身狗的 CZJ 表示很难受. 现在给出一个字符串代 ...
- SCNU ACM 2016新生赛初赛 解题报告
新生初赛题目.解题思路.参考代码一览 1001. 无聊的日常 Problem Description 两位小朋友小A和小B无聊时玩了个游戏,在限定时间内说出一排数字,那边说出的数大就赢,你的工作是帮他 ...
- acm结束了
最后一场比赛打完了.之前为了记录一些题目,开了这个博客,现在结束了acm,这个博客之后也不再更新了. 大家继续加油!
- 关于ACM的总结
看了不少大神的退役帖,今天终于要本弱装一波逼祭奠一下我关于ACM的回忆. 从大二上开始接触到大三下结束,接近两年的时间,对于大神们来说两年的确算不上时间,然而对于本弱来说就是大学的一半时光.大一的懵懂 ...
- 第一届山东省ACM——Phone Number(java)
Description We know that if a phone number A is another phone number B’s prefix, B is not able to be ...
- 第一届山东省ACM——Balloons(java)
Description Both Saya and Kudo like balloons. One day, they heard that in the central park, there wi ...
- ACM之鸡血篇
一匹黑马的诞生 故事还要从南京现场赛讲起,话说这次现场赛,各路ACM英雄豪杰齐聚南京,为争取亚洲总舵南京分舵舵主之职位,都使出了看 家本领,其中有最有实力的有京城两大帮清华帮,北大帮,南郡三大派上交派 ...
- 【codeforces 415D】Mashmokh and ACM(普通dp)
[codeforces 415D]Mashmokh and ACM 题意:美丽数列定义:对于数列中的每一个i都满足:arr[i+1]%arr[i]==0 输入n,k(1<=n,k<=200 ...
- acm 1002 算法设计
最近突然想往算法方向走走,做了做航电acm的几道题 二话不说,开始 航电acm 1002 题主要是处理长数据的问题,算法原理比较简单,就是用字符数组代替int,因为int太短需要处理的数据较长 下面是 ...
随机推荐
- 时序图中的生命线与类绑定(EA)
使用时序图时序图( Sequence Diagram)时,有时候在起初拖放放的对象生命线未绑定相关的类. 如果: 但在后期需要和类进行绑定. 那么需要如下设置,右键你要关联的对象生命线,选择Advan ...
- Word操作——通配符
参考资料:https://www.cnblogs.com/whchensir/p/5768030.html (1)查找引号中的内容 (“*”) ^p\1^p (2)按照句号,分号换行,当有引号时不换行 ...
- HTML个人简介
<!doctype html><html lang="en"> <head> <meta charset="UTF-8" ...
- JAVA判断是否是手机设备访问
package com.common.util; import java.util.regex.Matcher;import java.util.regex.Pattern; /** * 检测是否为移 ...
- bootstrap表格添加按钮、模态框实现
bootstrap表格添加按钮.模态框实现 原创 2017年07月20日 17:35:48 标签: bootstrap 1723 bootstrap表格添加按钮.模态框实现 - 需求: 需要表格后面每 ...
- CentOS 7.5 安装 Python3.7
1.安装开发者工具 yum -y groupinstall "Development Tools" 2.安装Python编译依赖包 yum -y install openssl-d ...
- 一个比较难忘的BUG
本学期开设了软件测试课程,在课上有讨论到bug,想到bug,真是很令人头疼的东西,相信每个程序都多多少少会有几个头疼的bug. 初学java时写过一个字符串判断的循环,之前学的C++字符类型用“==” ...
- windows之电脑开机出现 this product is covered by one or more of the following prtents
电脑开机出现 this product is covered by one or more of the following prtents 有次意外断电后就每次都出现这个提示,然后要等检查完才能进入 ...
- 【函数参数】什么是*args和**kwargs?
**args表示任何多个无名参数,它是一个tuple,Python将**args从开始到结束作为一个tuple传入函数 **kwargs表示关键字参数,它是一个dict,Python将**kwargs ...
- 虚拟机设置固定ip可以使shell远程连接到服务器
配置vim /etc/sysconfig/network-scripts/ifcfg-ens33 IPADDR = 你的本机ip 192.168.1. 的范围内 NETMASK = 255.255.2 ...