LuoguP1538 迎春舞会之数字舞蹈 题解
跟P1098一样是个大模拟题。
这样的数字其实在生活中很常见,比如说你家里的机顶盒的显示屏等等。
先看\(k=1\)的时候各个数字的显示。
- - - - - - - -
| | | | | | | | | | | | | |
- - - - - - -
| | | | | | | | | | | | |
- - - - - - -
我们发现,其实每个数字都可以分成\(5\)部分:
- - - - - - - - 第一部分
---------------------------------------
| | | | | | | | | | | | | | 第二部分
---------------------------------------
- - - - - - - 第三部分
---------------------------------------
| | | | | | | | | | | | | 第四部分
---------------------------------------
- - - - - - - 第五部分
而且我们还发现,奇数部分只有"-",偶数部分只有"|",并且每个之间都有一定的规律。
所以我们先找找规律吧。
第一部分:只有\(2,3,5,6,7,8,9,0\)有"-",其他的都没有。
第二部分:第一类(只有左边有"|"):\(5,6\);第二类(只有右边有"|"):\(1,2,3,7\);第三类(两边都有"|"):\(4,8,9,0\)。
第三部分:只有\(2,3,4,5,6,8,9\)有"-",其他的都没有。
第四部分:第一类(只有左边有"|"):\(2\);第二类(只有右边有"|"):\(1,3,4,5,7,9\);第三类(两边都有"|"):\(6,8,9\)。
第五部分:只有\(2,3,5,6,8,9,0\)有"-",其他的都没有。
所以,按照这样分类讨论就行了。
代码实现的时候可以一行一行的讨论,然后分别判断每个数字,最后依次输出就行了。实在不懂的可以看我\(100\)多行的代码:
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <iostream>
using namespace std;
int k;
char s[260];
int main() {
scanf("%d%s", &k, s);
for(int i = 1; i <= 2 * k + 3; ++i) {
if(i == 1) {
for(int j = 0; j < strlen(s); ++j)
if(s[j] == '0' || s[j] == '2' || s[j] == '3' || s[j] == '5' || s[j] == '6' || s[j] == '7' || s[j] == '8' || s[j] == '9') {
for(int ii = 1; ii <= k + 3; ++ii)
if(ii != 1 && ii != k + 3 && ii != k + 2)
printf("-");
else
printf(" ");
} else {
for(int ii = 1; ii <= k + 3; ++ii)
printf(" ");
}
}
else if(i >= 2 && i <= k + 1) {
for(int j = 0; j < strlen(s); ++j)
if(s[j] == '0' || s[j] == '4' || s[j] == '8' || s[j] == '9') {
for(int ii = 1; ii <= k + 3; ++ii)
if(ii == 1 || ii == k + 2)
printf("|");
else
printf(" ");
} else if(s[j] == '1' || s[j] == '2' || s[j] == '3' || s[j] == '7') {
for(int ii = 1; ii <= k + 3; ++ii)
if(ii == k + 2)
printf("|");
else
printf(" ");
} else if(s[j] == '5' || s[j] == '6') {
for(int ii = 1; ii <= k + 3; ++ii)
if(ii == 1)
printf("|");
else
printf(" ");
}
} else if(i == k + 2) {
for(int j = 0; j < strlen(s); ++j) {
if(s[j] == '2' || s[j] == '3' || s[j] == '4' || s[j] == '5' || s[j] == '6' || s[j] == '8' || s[j] == '9') {
for(int ii = 1; ii <= k + 3; ++ii)
if(ii != 1 && ii != k + 2 && ii != k + 3)
printf("-");
else
printf(" ");
}
else
for(int ii = 1; ii <= k + 3; ++ii)
printf(" ");
}
} else if(i >= k + 3 && i <= 2 * k + 2) {
for(int j = 0; j < strlen(s); ++j) {
if(s[j] == '1' || s[j] == '3' || s[j] == '4' || s[j] == '5' || s[j] == '7' || s[j] == '9') {
for(int ii = 1; ii <= k + 3; ++ii) {
if(ii == k + 2)
printf("|");
else
printf(" ");
}
} else if(s[j] == '2') {
for(int ii = 1; ii <= k + 3; ++ii) {
if(ii == 1)
printf("|");
else
printf(" ");
}
} else if(s[j] == '0' || s[j] == '6' || s[j] == '8') {
for(int ii = 1; ii <= k + 3; ++ii) {
if(ii == 1 || ii == k + 2)
printf("|");
else
printf(" ");
}
}
}
} else {
for(int j = 0; j < strlen(s); ++j)
if(s[j] == '0' || s[j] == '2' || s[j] == '3' || s[j] == '5' || s[j] == '6' || s[j] == '8' || s[j] == '9') {
for(int ii = 1; ii <= k + 3; ++ii) {
if(ii != 1 && ii != k + 2 && ii != k + 3)
printf("-");
else
printf(" ");
}
} else {
for(int ii = 1; ii <= k + 3; ++ii)
printf(" ");
}
}
puts("");
}
return 0;
}
//防伪水印:UID=112917
蒟蒻实在不懂各位神仙的神仙写法,就只好写个暴力造福新人了。
不在右上方点个赞再走嘛?

浙公网安备 33010602011771号