题目描述
我们经常需要使用日历,所以需要一个能生成日历的程序。
先要求你写一个程序,只需要输入年份,就能生成正确的日历。
输入
输入包含多组测试数据。每组输入一个整数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:日历本的更多相关文章

  1. SCNU ACM 2016新生赛决赛 解题报告

    新生初赛题目.解题思路.参考代码一览 A. 拒绝虐狗 Problem Description CZJ 去排队打饭的时候看到前面有几对情侣秀恩爱,作为单身狗的 CZJ 表示很难受. 现在给出一个字符串代 ...

  2. SCNU ACM 2016新生赛初赛 解题报告

    新生初赛题目.解题思路.参考代码一览 1001. 无聊的日常 Problem Description 两位小朋友小A和小B无聊时玩了个游戏,在限定时间内说出一排数字,那边说出的数大就赢,你的工作是帮他 ...

  3. acm结束了

    最后一场比赛打完了.之前为了记录一些题目,开了这个博客,现在结束了acm,这个博客之后也不再更新了. 大家继续加油!

  4. 关于ACM的总结

    看了不少大神的退役帖,今天终于要本弱装一波逼祭奠一下我关于ACM的回忆. 从大二上开始接触到大三下结束,接近两年的时间,对于大神们来说两年的确算不上时间,然而对于本弱来说就是大学的一半时光.大一的懵懂 ...

  5. 第一届山东省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 ...

  6. 第一届山东省ACM——Balloons(java)

    Description Both Saya and Kudo like balloons. One day, they heard that in the central park, there wi ...

  7. ACM之鸡血篇

    一匹黑马的诞生 故事还要从南京现场赛讲起,话说这次现场赛,各路ACM英雄豪杰齐聚南京,为争取亚洲总舵南京分舵舵主之职位,都使出了看 家本领,其中有最有实力的有京城两大帮清华帮,北大帮,南郡三大派上交派 ...

  8. 【codeforces 415D】Mashmokh and ACM(普通dp)

    [codeforces 415D]Mashmokh and ACM 题意:美丽数列定义:对于数列中的每一个i都满足:arr[i+1]%arr[i]==0 输入n,k(1<=n,k<=200 ...

  9. acm 1002 算法设计

    最近突然想往算法方向走走,做了做航电acm的几道题 二话不说,开始 航电acm 1002 题主要是处理长数据的问题,算法原理比较简单,就是用字符数组代替int,因为int太短需要处理的数据较长 下面是 ...

随机推荐

  1. [PCL]模型拟合方法——随机采样一致性

    SACSegmentation封装了多种Ransac方法,包括: RandomSampleConsensus, LeastMedianSquares, MEstimatorSampleConsensu ...

  2. Oracle DataGuard 11g 双机实验

    |操作系统 | release 6.7 | release 6.7 | |主机名 | stuaapp01 | stuaapp02 ||IP | 192.168.20.234 | 192.168.20. ...

  3. Leetcode: Max Consecutive Ones II(unsolved locked problem)

    Given a binary array, find the maximum number of consecutive 1s in this array if you can flip at mos ...

  4. EF:分页查询 + 条件查询 + 排序

    /// <summary> /// linq扩展类---zxh /// </summary> /// <typeparam name="T">& ...

  5. Nodejs使用robot操作鼠标键盘

    1.安装robotjs库 前提是配置了cnpm cnpm i robotjs -g   2.如果报错VCBuild.exe,如下可以安装windows-tool MSBUILD : error MSB ...

  6. MODBUS协议解析中常用的转换帮助类(C#)

    p{ text-align:center; } blockquote > p > span{ text-align:center; font-size: 18px; color: #ff0 ...

  7. 文件下载后台报错IllegalStateException: getOutputStream() has already been called

    java.lang.IllegalStateException: getOutputStream() has already been called <%@page language=" ...

  8. 配置nginx + keepalived 双主模式(双机互为主备)

  9. 【转】完美解决Python与anaconda之间的冲突问题

    本文转自:https://blog.csdn.net/sinat_41898105/article/details/80660332 anaconda指的是一个开源的Python发行版本,其包含了co ...

  10. flask 异步发送邮件

    异步发送邮件 当使用SMTP的方式发送电子邮件时,如果你手动使用浏览器测试程序的注册功能,在提交注册表单后,浏览器会有几秒钟的不响应.因为这时候程序正在发送电子邮件,发信的操作阻断了请求--响应循环, ...