[COCI2022-2023#5] Kalendar
题目描述
Magdalena 喜欢日历,她为每个月制作自己的日历。
每月的每一天都正好用三个字符表示:
- 如果天数是一位数,则表示为
..X
。例如:数字 7 7 7 被表示为..7
。 - 如果天数是两位数,那么它表示为
.XY
。例如:数字 17 17 17 被表示为.17
。
日历的每一行代表一个星期,每个星期由
7
7
7 天组成。如果
一周没有所有的
7
7
7 天(因为有可能这个月不是从星期一开始的,或者不是在星期日结束的),那么缺失的日子就用 ...
表示。
Magdalena 也希望她的日历是漂亮的。她将用以下方式来装饰它:
她将在上下两边填上 -
(ASCII 45),左右两边填上 |
(ASCII 124),而四个角落用 +
(ASCII 43)。
你的任务是确定 Magdalena 日历的格式,如果它有 n n n 天,并且每月的第一天是一周的第 x x x 天。例如,如果 x = 1 x=1 x=1,这个月就从星期一开始,如果 x = 5 x=5 x=5,就从星期五开始。
我们假设一周的第一天是星期一。
输入格式
一行,包含整数 n n n 和 x ( 1 ≤ n ≤ 99 , 1 ≤ x ≤ 7 ) x(1\leq n\leq 99,1\leq x\leq 7) x(1≤n≤99,1≤x≤7),表示该月的天数,以及该月的起始日。
输出格式
输出 Magdalena 日历的样子。
样例 #1
样例输入 #1
31 3
样例输出 #1
+---------------------+
|........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.31......|
+---------------------+
样例 #2
样例输入 #2
1 5
样例输出 #2
+---------------------+
|..............1......|
+---------------------+
样例 #3
样例输入 #3
28 7
样例输出 #3
+---------------------+
|....................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...|
+---------------------+
提示说明
Subtask | p t s pts pts | 限制 |
---|---|---|
0 0 0 | 0 0 0 | 是样例 |
1 1 1 | 7 7 7 | n + x ≤ 8 n+x\leq 8 n+x≤8 |
2 2 2 | 19 19 19 | x = 1 x=1 x=1 |
3 3 3 | 24 24 24 | 无 |
代码内容
// #include <iostream>
// #include <algorithm>
// #include <cstring>
// #include <stack>//栈
// #include <deque>//队列
// #include <queue>//堆/优先队列
// #include <map>//映射
// #include <unordered_map>//哈希表
// #include <vector>//容器,存数组的数,表数组的长度
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
ll n,x,d=0;
cin>>n>>x;
puts("+---------------------+");
d-=(x-2);//保证第一天的位置是正确的
for(ll i=1;;i++)
{
cout<<"|";
for(ll j=1;j<=7;j++)
{
if(d<=0||d>n) cout<<"...";
else if(d>0&&d<10) cout<<".."<<d;
else cout<<"."<<d;
d++;
}
cout<<"|"<<endl;
if(d>n) break;
}
puts("+---------------------+");
return 0;
}