金山笔试题
要在屏幕上显示类似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;
}
输出:
_ _ _ _ _ _ _ _
[解决办法]
_
[解决办法]
_
[解决办法]
_
[解决办法]
_
[解决办法]
_
------解决方案--------------------
[解决办法]
_
[解决办法]
_
[解决办法]
[解决办法]
[解决办法]
[解决办法]
_ _
[解决办法]
[解决办法]
_
[解决办法]
_
[解决办法]
[解决办法]
_
[解决办法]
_
[解决办法]
_
[解决办法]
[解决办法]
哈哈,我来一个小白版的吧(在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;
}
