[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 | 无 |
C++实现
#include
using namespace std;
int n,x,d;
int main(){
cin>>n>>x;
cout<<“±--------------------+”<<endl;
d-=(x-2);
for(int i=1;;i++){
cout<<“|”;
for(int 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;
}
}
cout<<“±--------------------+”<<endl;
}
后续:
接下来我会不断用C++来实现信奥比赛中的算法题、C++考级编程题实现、白名单赛事考题实现,感兴趣的请关注,我后续将继续分享相关内容