题目大意很容易搞懂
这里记录下我用到的两种方法
第一种比较常规,每个数字都有五个部分组成,分部分打印
#include <iostream>
using namespace std;
#include <string>
int main ( )
{
int a;
string b;
while ( cin >> a >> b && ( a || b != "0" ) )
{
for ( int i = 0 ; i < b. size ( ) ; i++ )
{
switch ( b[ i] )
{
case '1' :
case '4' :
for ( int j = 0 ; j < a + 2 ; j++ )
{
cout << " " ;
}
break ;
default :
cout << " " ;
for ( int j = 0 ; j < a; j++ )
{
cout << "-" ;
}
cout << " " ;
break ;
}
if ( i!= b. size ( ) - 1 )
cout << " " ;
}
cout << endl;
for ( int i = 0 ; i < a; i++ )
{
for ( int j = 0 ; j < b. size ( ) ; j++ )
{
switch ( b[ j] )
{
case '1' :
case '2' :
case '3' :
case '7' :
for ( int k = 0 ; k < a + 1 ; k++ )
{
cout << " " ;
}
cout << "|" ;
break ;
case '5' :
case '6' :
cout << "|" ;
for ( int k = 0 ; k< a + 1 ; k++ )
{
cout << " " ;
}
break ;
default :
cout << "|" ;
for ( int k = 0 ; k< a; k++ )
{
cout << " " ;
}
cout << "|" ;
break ;
}
if ( j!= b. size ( ) - 1 )
cout << " " ;
}
cout << endl;
}
for ( int i = 0 ; i < b. size ( ) ; i++ )
{
switch ( b[ i] )
{
case '1' :
case '7' :
case '0' :
for ( int j = 0 ; j < a + 2 ; j++ )
{
cout << " " ;
}
break ;
default :
cout << " " ;
for ( int j = 0 ; j < a; j++ )
{
cout << "-" ;
}
cout << " " ;
break ;
}
if ( i!= b. size ( ) - 1 )
cout << " " ;
}
cout << endl;
for ( int i = 0 ; i < a; i++ )
{
for ( int j = 0 ; j < b. size ( ) ; j++ )
{
switch ( b[ j] )
{
case '2' :
cout << "|" ;
for ( int k = 0 ; k < a + 1 ; k++ )
{
cout << " " ;
}
break ;
case '6' :
case '8' :
case '0' :
cout << "|" ;
for ( int k = 0 ; k < a; k++ )
{
cout << " " ;
}
cout << "|" ;
break ;
default :
for ( int k = 0 ; k < a + 1 ; k++ )
{
cout << " " ;
}
cout << "|" ;
break ;
}
if ( j!= b. size ( ) - 1 )
cout << " " ;
}
cout << endl;
}
for ( int i = 0 ; i < b. size ( ) ; i++ )
{
switch ( b[ i] )
{
case '1' :
case '4' :
case '7' :
for ( int j = 0 ; j < a + 2 ; j++ )
{
cout << " " ;
}
break ;
default :
cout << " " ;
for ( int j = 0 ; j < a; j++ )
{
cout << "-" ;
}
cout << " " ;
break ;
}
if ( i!= b. size ( ) - 1 )
cout << " " ;
}
cout << endl<< endl;
}
return 0 ;
}
第二种方法其实也是我在csdn上学习到的
它的原理是先将每个数字size为1的时候的样子存储到一个string数组中,然后再根据需要进行放大
放大操作其实也很好理解,当size=1的时候,每一个数字都是3列,再结合题目中给出的output不难看出,放大操作其实就是把size=1的时候的第二列进行了放大,行数进行了放大而已
#include <iostream>
using namespace std;
#include <string>
int main ( )
{
string digit[ 5 ] [ 10 ] = {
" - " , " " , " - " , " - " , " " , " - " , " - " , " - " , " - " , " - " ,
"| |" , " |" , " |" , " |" , "| |" , "| " , "| " , " |" , "| |" , "| |" ,
" " , " " , " - " , " - " , " - " , " - " , " - " , " " , " - " , " - " ,
"| |" , " |" , "| " , " |" , " |" , " |" , "| |" , " |" , "| |" , " |" ,
" - " , " " , " - " , " - " , " " , " - " , " - " , " " , " - " , " - " } ;
int a;
string b;
while ( cin >> a >> b && ( a || b != "0" ) )
{
for ( int i = 1 ; i <= a * 2 + 3 ; i++ )
{
for ( int j = 0 ; j < b. size ( ) ; j++ )
{
string line;
if ( i == 1 )
{
line = digit[ 0 ] [ b[ j] - '0' ] ;
}
else if ( i >= 2 && i <= a + 1 )
{
line = digit[ 1 ] [ b[ j] - '0' ] ;
}
else if ( i == a + 2 )
{
line = digit[ 2 ] [ b[ j] - '0' ] ;
}
else if ( i >= a + 3 && i <= 2 * a + 2 )
{
line = digit[ 3 ] [ b[ j] - '0' ] ;
}
else
{
line = digit[ 4 ] [ b[ j] - '0' ] ;
}
cout << line[ 0 ] ;
for ( int k = 0 ; k < a; k++ )
{
cout << line[ 1 ] ;
}
cout << line[ 2 ] ;
if ( j != b. size ( ) - 1 )
cout << " " ;
}
cout << endl;
}
cout << endl;
}
return 0 ;
}