B4067 题解
因个人原因本蒟蒻未能参加本次GESP三级,但在考完第一时间写了这道题
先来读题,发现本题很水考察字符串等知识点
但是本蒟蒻一开始不懂发什么神经想偏了,用了亿个if else,这个写法肥肠不推荐使用,逻辑较复杂:
#include <bits/stdc++.h>
using namespace std;
int a[10];
int main()
{
int n,k = 1;
scanf("%d",&n);
if(n == 0){
printf(".....\n");
printf(".***.\n");
printf(".***.\n");
printf(".***.\n");
printf(".....\n");
}
while(n > 0){
a[k] = n % 10;
n /= 10;
k ++;
}
k --;
for(int i = 1;i <= 5;i ++){
for(int j = k;j >= 1;j --){
if(a[j] == 0){
if(i == 1 || i == 5) printf(".....");
else printf(".***.");
}
else if(a[j] == 1) printf("****.");
else if(a[j] == 2){
if(i == 1 || i == 3 || i == 5) printf(".....");
else if(i == 2) printf("****.");
else printf(".****");
}
else if(a[j] == 3){
if(i == 1 || i == 3 || i == 5) printf(".....");
else printf("****.");
}
}
printf("\n");
}
return 0;
}
那有没有更加优雅的写法呢?很简单,二维打表!
#include <bits/stdc++.h>
using namespace std;
string s[4][5] = {
{".....",".***.",".***.",".***.",".....",},
{"****.","****.","****.","****.","****.",},
{".....","****.",".....",".****",".....",},
{".....","****.",".....","****.",".....",},
};
int main() {
int n;
cin >> n;
string s2 = to_string(n);
for(int i = 0; i < 5 ; i++){
for(int j = 0;j < s2.size();j++){
if (str[j] == '0') cout << s[0][i];
if (s2[j] == '1') cout << s[1][i];
if (s2[j] == '2') cout << s[2][i];
if (s2[j] == '3') cout << s[3][i];
}
cout << "\n";
}
return 0;
}
很多小萌新可能布吉岛to_string是什么,这里科普一下,是把整型转换为string类型。至于为什么不转成char,是因为我善觉得string更加方便
总的来说,我们肯定要一行一行的打印,按照题目所给的数字一一对应。大体思路很简单,就是考察码力