题解 P5730 【【深基5.例10】显示屏】
这道题没有什么技术含量,就是暴力,上代码:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
char a[10000];
string ans[10];
for(int i=1;i<=n;i++)
{
cin>>a[i];
if(a[i]=='1')
{
ans[1]+="..X.";
ans[2]+="..X.";
ans[3]+="..X.";
ans[4]+="..X.";
ans[5]+="..X.";
}
if(a[i]=='2')
{
ans[1]+="XXX.";
ans[2]+="..X.";
ans[3]+="XXX.";
ans[4]+="X...";
ans[5]+="XXX.";
}
if(a[i]=='3')
{
ans[1]+="XXX.";
ans[2]+="..X.";
ans[3]+="XXX.";
ans[4]+="..X.";
ans[5]+="XXX.";
}
if(a[i]=='4')
{
ans[1]+="X.X.";
ans[2]+="X.X.";
ans[3]+="XXX.";
ans[4]+="..X.";
ans[5]+="..X.";
}
if(a[i]=='5')
{
ans[1]+="XXX.";
ans[2]+="X...";
ans[3]+="XXX.";
ans[4]+="..X.";
ans[5]+="XXX.";
}
if(a[i]=='6')
{
ans[1]+="XXX.";
ans[2]+="X...";
ans[3]+="XXX.";
ans[4]+="X.X.";
ans[5]+="XXX.";
}
if(a[i]=='7')
{
ans[1]+="XXX.";
ans[2]+="..X.";
ans[3]+="..X.";
ans[4]+="..X.";
ans[5]+="..X.";
}
if(a[i]=='8')
{
ans[1]+="XXX.";
ans[2]+="X.X.";
ans[3]+="XXX.";
ans[4]+="X.X.";
ans[5]+="XXX.";
}
if(a[i]=='9')
{
ans[1]+="XXX.";
ans[2]+="X.X.";
ans[3]+="XXX.";
ans[4]+="..X.";
ans[5]+="XXX.";
}
if(a[i]=='0')
{
ans[1]+="XXX.";
ans[2]+="X.X.";
ans[3]+="X.X.";
ans[4]+="X.X.";
ans[5]+="XXX.";
}
}
for(int i=1;i<=5;i++)
{
ans[i]=ans[i].substr(0,ans[i].length()-1);
cout<<ans[i]<<endl;
}
return 0;
}
暴力的思路,就是将显示屏割成 5 行分开操作,每次往后面接上一段就可以了。
唯一可说的可能就是最后的去点操作。substr 函数就是复制字符串操作,其形式为 substr(开始位置,复制多长)。我们将原字符串长度用 length 求出,然后减 1,就相当于将原字符串缩短一位,也就是去掉了最后一位(也就是题中的“ . ” ),从而实现了去点的目的。
还是希望能过审啊qwq