液晶屏上,每个阿拉伯数字都是可以显示成 3×5 的点阵的(其中 X 表示亮点,. 表示暗点)。现在给出数字位数(不超过 100)和一串数字,要求输出这些数字在显示屏上的效果。数字的显示方式如同样例输出,注意每个数字之间都有一列间隔。
这题归纳在数组的类别中,但我感觉它更像是侧重考查字符串,毕竟用到了字符串的一点小技巧。
我的做法很粗暴,打表,把所有情况都枚举出来(一般没思路或者追求速度建议打表,不用想的)。
不知道为啥数组b要定义成string类型,char不行(但是一般字符串数组要不是char a[100]要不是直接string a接for循环)。
我的做法相当于把图案分割成5行,注意 += 的使用。
最后是去点操作(最后一个 . ) substr函数就是复制字符串操作,substr(开始位置,复制多长)。
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
char a[100];
string b[100]; //不知道为啥,大佬可以指点一下嘛?
for(int i=1;i<=n;i++)
{
cin>>a[i];
if(a[i]=='0')
{
b[1]+="XXX.";
b[2]+="X.X.";
b[3]+="X.X.";
b[4]+="X.X.";
b[5]+="XXX.";
}
if(a[i]=='1')
{
b[1]+="..X.";
b[2]+="..X.";
b[3]+="..X.";
b[4]+="..X.";
b[5]+="..X.";
}
if(a[i]=='2')
{
b[1]+="XXX.";
b[2]+="..X.";
b[3]+="XXX.";
b[4]+="X...";
b[5]+="XXX.";
}
if(a[i]=='3')
{
b[1]+="XXX.";
b[2]+="..X.";
b[3]+="XXX.";
b[4]+="..X.";
b[5]+="XXX.";
}
if(a[i]=='4')
{
b[1]+="X.X.";
b[2]+="X.X.";
b[3]+="XXX.";
b[4]+="..X.";
b[5]+="..X.";
}
if(a[i]=='5')
{
b[1]+="XXX.";
b[2]+="X...";
b[3]+="XXX.";
b[4]+="..X.";
b[5]+="XXX.";
}
if(a[i]=='6')
{
b[1]+="XXX.";
b[2]+="X...";
b[3]+="XXX.";
b[4]+="X.X.";
b[5]+="XXX.";
}
if(a[i]=='7')
{
b[1]+="XXX.";
b[2]+="..X.";
b[3]+="..X.";
b[4]+="..X.";
b[5]+="..X.";
}
if(a[i]=='8')
{
b[1]+="XXX.";
b[2]+="X.X.";
b[3]+="XXX.";
b[4]+="X.X.";
b[5]+="XXX.";
}
if(a[i]=='9')
{
b[1]+="XXX.";
b[2]+="X.X.";
b[3]+="XXX.";
b[4]+="..X.";
b[5]+="XXX.";
}
}
for(int i=1;i<=5;i++) //去点操作
{
b[i]=b[i].substr(0,b[i].length()-1);
cout<<b[i]<<endl;
}
return 0;
}