[COCI2022-2023#5] Kalendar
题目描述
Magdalena 喜欢日历,她为每个月制作自己的日历。
每月的每一天都正好用三个字符表示:
- 如果天数是一位数,则表示为
..X。例如:数字 777 被表示为..7。 - 如果天数是两位数,那么它表示为
.XY。例如:数字 171717 被表示为.17。
日历的每一行代表一个星期,每个星期由 777 天组成。如果
一周没有所有的 777 天(因为有可能这个月不是从星期一开始的,或者不是在星期日结束的),那么缺失的日子就用 ... 表示。
Magdalena 也希望她的日历是漂亮的。她将用以下方式来装饰它:
她将在上下两边填上 -(ASCII 45),左右两边填上 |(ASCII 124),而四个角落用 +(ASCII 43)。
你的任务是确定 Magdalena 日历的格式,如果它有 nnn 天,并且每月的第一天是一周的第 xxx 天。例如,如果 x=1x=1x=1,这个月就从星期一开始,如果 x=5x=5x=5,就从星期五开始。
我们假设一周的第一天是星期一。
输入格式
一行,包含整数 nnn 和 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 | ptsptspts | 限制 |
|---|---|---|
| 000 | 000 | 是样例 |
| 111 | 777 | n+x≤8n+x\leq 8n+x≤8 |
| 222 | 191919 | x=1x=1x=1 |
| 333 | 242424 | 无 |
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++考级编程题实现、白名单赛事考题实现,感兴趣的请关注,我后续将继续分享相关内容
845

被折叠的 条评论
为什么被折叠?



