B4414 [GESP202509 三级] 日历制作

题目描述

小 A 想制作 202520252025 年每个月的日历。他希望你能编写一个程序,按照格式输出给定月份的日历。

具体来说,第一行需要输出 MON TUE WED THU FRI SAT SUN,分别表示星期一到星期日。接下来若干行中依次输出这个月所包含的日期,日期的个位需要和对应星期几的缩写最后一个字母对齐。例如,202520252025999111 日是星期一,在输出九月的日历时,111 号的个位 111 就需要与星期一 MON 的最后一个字母 N 对齐。九月的日历输出效果如下:

MON TUE WED THU FRI SAT SUN
  1   2   3   4   5   6   7
  8   9  10  11  12  13  14
 15  16  17  18  19  20  21
 22  23  24  25  26  27  28
 29  30

你能帮助小 A 完成日历的制作吗?

输入格式

一行,一个正整数 mmm,表示需要按照格式输出 202520252025mmm 月的日历。

输出格式

输出包含若干行,表示 202520252025mmm 月的日历。

输入输出样例 #1

输入 #1

9

输出 #1

MON TUE WED THU FRI SAT SUN
  1   2   3   4   5   6   7
  8   9  10  11  12  13  14
 15  16  17  18  19  20  21
 22  23  24  25  26  27  28
 29  30

输入输出样例 #2

输入 #2

6

输出 #2

MON TUE WED THU FRI SAT SUN
                          1
  2   3   4   5   6   7   8
  9  10  11  12  13  14  15
 16  17  18  19  20  21  22
 23  24  25  26  27  28  29
 30

说明/提示

对于所有测试点,保证 1≤m≤121 \leq m \leq 121m12

#include<bits/stdc++.h>

using namespace std;
typedef long long ll;	// 严格要求
ll func(ll x){	//判断当前月是多少天 
	if(x == 1 || x == 3 || x == 5 || x == 7 || x == 8 || x == 10 || x == 12){
		return 31;
	} 
	else if(x == 2){
		return 28;
	}
	else{
		return 30;
	}
}
int main(){
	ios :: sync_with_stdio(0);	// 提高cin、cout的运行速度
	ll n, sum = 0, cnt = 0;	//sum是与9月1日的差数天 已知9月1日周一 
	cin >> n;
	
	cout << "MON TUE WED THU FRI SAT SUN" << endl;
	
	if(n > 9){		//当月份大于9时 
		for(ll i = 9; i <= n - 1; i++){
			sum += func(i);			//此后需要过多少天
		}
		cnt = 1 + (sum % 7);		//cnt是第n月的第一天是周cnt 说明前面有cnt - 1个空格位置	
		//eg:当n等于10 cnt 为 周六
		for(ll i = 1; i <= func(n) + cnt - 1; i++){
			if(i <= cnt - 1){
				cout << "    ";
			}
			else{
				cout << setw(3) << setfill(' ') << i - cnt + 1<< " ";
			}
			if(i % 7 == 0){		//需要换行(此前空格位置也要算)
				cout << endl;
			}
		}  
	}
	else{
		for(ll i = n; i < 9; i++){
			sum += func(i);	//此前多少天
		}
		cnt = 1 + 7 - (sum % 7);
		if(cnt == 8){		//注意9月就可以 
			cnt = 1;
		}
		for(ll i = 1; i <= func(n) + cnt - 1; i++){
			if(i <= cnt - 1){
				cout << "    ";
			}
			else{
				cout << setw(3) << setfill(' ') << i - cnt + 1<< " ";
			}
			if(i % 7 == 0){
				cout << endl;
			}
		} 
	}
	

    return 0;
}

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐