金山笔考试题

金山笔试题要在屏幕上显示类似LED显示效果的数字拼图,咋显示啊?我们直接在屏幕上用cout显示的数字都不是这

金山笔试题
要在屏幕上显示类似LED显示效果的数字拼图,咋显示啊?我们直接在屏幕上用cout显示的数字都不是这种效果啊金山笔考试题,请教各位大神啦~~~~   金山 c++???
[解决办法]
根据上面的提示,做下面程序

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

extern char a[10][20];

int main(int argc, char* argv[])
{
char szstr[16] = {0};
printf("输入字符串:");
scanf("%s", szstr);
int len = strlen(szstr);
for (int i=0; i<5; i++)
{
for (int j=0; j<len; j++)
{
int num = szstr[j]-'0';
for (int k=0; k<4; k++)
{
if (a[num][i*4+k] == 1)
{
printf("+");
}
else
{
printf(" ");
}
}
printf("  ");
}
printf("\n");
}
return 0;
}

char a[10][20] = {
{ // 0
1, 1, 1, 1,
1, 0, 0, 1,
1, 0, 0, 1,
1, 0, 0, 1,
1, 1, 1, 1,
}, 
{ // 1
0, 0, 1, 0,
0, 0, 1, 0,
0, 0, 1, 0,
0, 0, 1, 0,
0, 0, 1, 0,
},
{ // 2
1, 1, 1, 1,
0, 0, 0, 1,
1, 1, 1, 1,
1, 0, 0, 0,
1, 1, 1, 1,
},
{ // 3
1, 1, 1, 1,
0, 0, 0, 1,
1, 1, 1, 1,
0, 0, 0, 1,
1, 1, 1, 1,
},
{ // 4
1, 0, 0, 1,
1, 0, 0, 1,
1, 1, 1, 1,
0, 0, 0, 1,
0, 0, 0, 1,
},
{ // 5
1, 1, 1, 1,
1, 0, 0, 0,
1, 1, 1, 1,
0, 0, 0, 1,
1, 1, 1, 1,
},
{ // 6
1, 1, 1, 1,
1, 0, 0, 0,
1, 1, 1, 1,
1, 0, 0, 1,
1, 1, 1, 1,
},
{ // 7
1, 1, 1, 1,
0, 0, 0, 1,
0, 0, 0, 1,
0, 0, 0, 0,
0, 0, 0, 1,
},
{ // 8
1, 1, 1, 1,
1, 0, 0, 1,
1, 1, 1, 1,
1, 0, 0, 1,
1, 1, 1, 1,
},
{ // 9
1, 1, 1, 1,
1, 0, 0, 1,
1, 1, 1, 1,
0, 0, 0, 1,
1, 1, 1, 1,
},
};

输入输出:
输入字符串:1234567890
  +   ++++  ++++  +  +  ++++  ++++  ++++  ++++  ++++  ++++
  +      +     +  +  +  +     +        +  +  +  +  +  +  +


  +   ++++  ++++  ++++  ++++  ++++     +  ++++  ++++  +  +
  +   +        +     +     +  +  +        +  +     +  +  +
  +   ++++  ++++     +  ++++  ++++     +  ++++  ++++  ++++
不过我觉得这问题,应该有更好的办法,不会是这样子的...
[解决办法]
我们学校oj上就有这道题金山笔考试题
金山笔考试题



#include<stdio.h>
#include<string.h>

void hang_1(int n) /*    */
{
int i;
for(i=0;i<n+2;++i)
printf(" ");
}

void hang_2(int n)/* -- */
{
int i;
printf(" ");
for(i=0;i<n;++i)
printf("-");
printf(" ");

}

void hang_3(int n)/*   
[解决办法]
*/
{
int i;
for(i=0;i<n+1;++i)
printf(" ");
printf("
[解决办法]
");
}

void hang_4(int n)/*
[解决办法]
    */
{
int i;
printf("
[解决办法]
");
for(i=0;i<n+1;++i)
printf(" ");
}

void hang_5(int n)/*
[解决办法]
  
[解决办法]
*/
{
int i;
printf("
[解决办法]
");
for(i=0;i<n;++i)
printf(" ");
printf("
[解决办法]
");
}

void output_1(int n,char c[])
{
int i;
int len = strlen(c);
for(i=0;i<len;++i)
{
if(i>0)
printf(" ");

if(c[i]=='1' 
[解决办法]
 c[i]=='4')
hang_1(n);
else
hang_2(n);
}
printf("\n");
}

void output_2(int n,char c[])
{
int i;
int len = strlen(c);
for(i=0;i<len;++i)
{
if(i>0)
printf(" ");

if(c[i]=='1' 
[解决办法]
 c[i]=='2' 
[解决办法]
c[i]=='3' 
[解决办法]
 c[i]=='7')
hang_3(n);
else if(c[i]=='5' 
[解决办法]
 c[i]=='6')
hang_4(n);
else if(c[i]=='4' 
------解决方案--------------------


 c[i]=='8' 
[解决办法]
 c[i]=='9' 
[解决办法]
 c[i]=='0')
hang_5(n);
}
printf("\n");
}

void output_3(int n,char c[])
{
int i;
int len = strlen(c);
for(i=0;i<len;++i)
{
if(i>0)
printf(" ");
if(c[i]=='1' 
[解决办法]
 c[i]=='7' 
[解决办法]
 c[i]=='0')
hang_1(n);
else
hang_2(n);
}
printf("\n");
}

void output_4(int n,char c[])
{
int i;
int len = strlen(c);
for(i=0;i<len;++i)
{
if(i>0)
printf(" ");
if(c[i]=='1' 
[解决办法]
 c[i]=='3' 
[解决办法]
c[i]=='4' 
[解决办法]
 c[i]=='5' 
[解决办法]
 c[i]=='7' 
[解决办法]
 c[i]=='9')
hang_3(n);
else if(c[i]=='2')
hang_4(n);
else
hang_5(n);
}
printf("\n");
}

void output_5(int n,char c[])
{
int i;
int len = strlen(c);
for(i=0;i<len;++i)
{
if(i>0)
printf(" ");
if(c[i]=='1' 
[解决办法]
 c[i]=='4' 
[解决办法]
 c[i]=='7')
hang_1(n);
else
hang_2(n);
}
printf("\n");
}

int main(void)
{
int i;
int n;
char c[20];
while(scanf("%d %s",&n,c),n!=0)
{
output_1(n,c);
for(i=0;i<n;++i)
output_2(n,c);
output_3(n,c);
for(i=0;i<n;++i)
output_4(n,c);
output_5(n,c);
printf("\n");
}
return 0;
}


[解决办法]
我以前还真蛋疼地实现过这个,不过不知道是否合乎金山的题意,仅供楼主参考
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
//第一层
int num1[10] = {  1, //0
  0, //1
  1,//2
  1,//3
  0,//4
  1,//5
  1,//6
  1,//7
  1,//8
  1};//9
//第二层
int num2[10][3] = {1, 0, 1,//0
  1, 0, 0,//1
  0, 1, 1,//2
  0, 1, 1,//3
  1, 1, 1,//4
  1, 1, 0,//5
  1, 1, 0,//6
  1, 0, 1,//7
  1, 1, 1,//8
  1, 1, 1};//9
//第三层
int num3[10][3] = {1, 1, 1,//0
  1, 0, 0,//1


  1, 1, 0,//2
  0, 1, 1,//3
  0, 0, 1,//4
  0, 1, 1,//5
  1, 1, 1,//6
  0, 0, 1,//7
  1, 1, 1,//8
  0, 1, 1};//9

/***************************
 -    第1个  短杠  

[解决办法]
_
[解决办法]
  第2,3,4个短杆

[解决办法]
_
[解决办法]
   第5,6,7个短杆
****************************/
char* sign_hide1 = "   ";
char* sign_hide23[3] = {" ", " ", " "};

char* sign_show1 = " _ ";
char* sign_show23[3] = {"
[解决办法]
", "_", "
[解决办法]
"};   

//1f
void ShowNum1(int number)
{
if(number>=0 && number<10)
{
if(num1[number] == 0)//0表示这个位置没有短杆
{
cout<<sign_hide1;
}
else
{
cout<<sign_show1;
}
}
}
//2f
void ShowNum2(int number)
{
if(number>=0 && number<10)
{
for(int i=0; i<3; i++)
{
if(num2[number][i] == 0)
{
cout<<sign_hide23[i];
}
else
{
cout<<sign_show23[i];
}
}
}
}
//3f
void ShowNum3(int number)
{
if(number>=0 && number<10)
{
for(int i=0; i<3; i++)
{
if(num3[number][i] == 0)
{
cout<<sign_hide23[i];
}
else
{
cout<<sign_show23[i];
}
}
}
}

void ShowNum(int number)
{
vector<int> temp;
while(number != 0)
{
temp.push_back(number % 10);
number /= 10;
}

for_each(temp.rbegin(), temp.rend(), ShowNum1);
cout<<endl;
for_each(temp.rbegin(), temp.rend(), ShowNum2);
cout<<endl;
for_each(temp.rbegin(), temp.rend(), ShowNum3);
cout<<endl;
}

int main()
{
ShowNum(1234567890);

system("pause");
return 0;
}



输出:
&nbsp;&nbsp;&nbsp; _&nbsp; _&nbsp;&nbsp;&nbsp;&nbsp; _&nbsp; _&nbsp; _&nbsp; _&nbsp; _&nbsp; _

[解决办法]
&nbsp;&nbsp; _
[解决办法]
 _
[解决办法]
_
[解决办法]

[解决办法]

------解决方案--------------------


 
[解决办法]
_
[解决办法]
_
[解决办法]
 
[解决办法]


[解决办法]
&nbsp; 
[解决办法]
_&nbsp; _
[解决办法]
&nbsp; 
[解决办法]
 _
[解决办法]
_
[解决办法]
&nbsp; 
[解决办法]
_
[解决办法]
 _
[解决办法]
_
[解决办法]


[解决办法]
哈哈,我来一个小白版的吧(在GCC编译器下OK):
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

char ch0[8][6]={" --- ",
                "
[解决办法]
   
[解决办法]
",
                "
[解决办法]
   
[解决办法]
",
                "
[解决办法]
   
[解决办法]
",
                "
[解决办法]
   
[解决办法]
",
                "
[解决办法]
   
[解决办法]
",
                " --- "
                };
char ch1[8][6]={"     ",
                "    
[解决办法]
",
                "    


[解决办法]
",
                "    
[解决办法]
",
                "    
[解决办法]
",
                "    
[解决办法]
",
                "     "
                };
char ch2[8][6]={" --- ",
                "    
[解决办法]
",
                "    
[解决办法]
",
                " --- ",
                "
[解决办法]
    ",
                "
[解决办法]
    ",
                " --- "
                };
char ch3[8][6]={" --- ",
                "    
[解决办法]
",
                "    
[解决办法]
",
                " ---
[解决办法]
",
                "    
[解决办法]
",
                "    
[解决办法]
",
                " --- "
                };
char ch4[8][6]={"     ",
                "
[解决办法]
   
------解决方案--------------------


",
                "
[解决办法]
   
[解决办法]
",
                " ---
[解决办法]
",
                "    
[解决办法]
",
                "    
[解决办法]
",
                "     "
                };
char ch5[8][6]={" --- ",
                "
[解决办法]
    ",
                "
[解决办法]
    ",
                " --- ",
                "    
[解决办法]
",
                "    
[解决办法]
",
                " --- "
                };
char ch6[8][6]={" --- ",
                "
[解决办法]
    ",
                "
[解决办法]
    ",
                "
[解决办法]
--- ",
                "
[解决办法]
   
[解决办法]
",
                "
[解决办法]
   
[解决办法]
",
                " --- "


                };
char ch7[8][6]={" --- ",
                "    
[解决办法]
",
                "    
[解决办法]
",
                "    
[解决办法]
",
                "    
[解决办法]
",
                "    
[解决办法]
",
                "     "
                };
char ch8[8][6]={" --- ",
                "
[解决办法]
   
[解决办法]
",
                "
[解决办法]
   
[解决办法]
",
                "
[解决办法]
---
[解决办法]
",
                "
[解决办法]
   
[解决办法]
",
                "
[解决办法]
   
[解决办法]
",
                " --- "
                };
char ch9[8][6]={" --- ",
                "
[解决办法]
   
[解决办法]
",
                "
[解决办法]
   
------解决方案--------------------


",
                " ---
[解决办法]
",
                "    
[解决办法]
",
                "    
[解决办法]
",
                " --- "
                };

void printLevel(char *a, int r){
    int tmp = r*6;
    for(int j=0; j < 6; ++j){
        cout<<a[tmp+j];
    }
}
void printStr(const string& str)
{
    for(int i=0; i < 7; ++i){
        for(int num=0; num < str.size(); ++num){
            switch(str[num]){
            case '0'://print 0 of level i
                printLevel(&ch0[0][0], i);break;
            case '1'://print 0 of level i
                printLevel(&ch1[0][0], i);break;
            case '2'://print 0 of level i
                printLevel(&ch2[0][0], i);break;
            case '3'://print 0 of level i
                printLevel(&ch3[0][0], i);break;
            case '4'://print 0 of level i
                printLevel(&ch4[0][0], i);break;
            case '5'://print 0 of level i
                printLevel(&ch5[0][0], i);break;
            case '6'://print 0 of level i
                printLevel(&ch6[0][0], i);break;
            case '7'://print 0 of level i
                printLevel(&ch7[0][0], i);break;
            case '8'://print 0 of level i
                printLevel(&ch8[0][0], i);break;


            case '9'://print 0 of level i
                printLevel(&ch9[0][0], i);break;
            default:
                cout<<"error"<<endl;break;
            }
        }
        cout<<endl;
    }
}

void LEDprint(int num){
    if(num < 0 
[解决办法]
 num > numeric_limits<int>::max()){
        cerr<<"error num!"<<endl;
        return;
    }
    string str;
    while(num){
        str.push_back(48 + num%10);
        num /= 10;
    }
    reverse(str.begin(), str.end());
    printStr(str);
}
int main(){
    int num;
    cout<<"please input the num:";
    cin>>num;
    LEDprint(num);
    return 0;
}