일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 다중반복문
- Linux
- 알고리즘
- 프로그래밍
- 독서 감상문
- 풀이&소스코드저작권:왕유승
- 문제출저:www.dovelet.com
- C++
- 정보올림피아드
- if문
- 반복문
- 영재교육원
- C
- 수학영재원
- 자료구조
- 배열
- IT
- c언어
- 정보과학
- 독후감
- API
- For문
- 제어문
- Backdoor
- 리눅스 명령어
- 정보영재원
- 리눅스
- 백도어
- DBMS
- 참조은요양병원
- Today
- Total
되는대로 살자
[C언어 기출문제&풀이] LCD 디스플레이 본문
한 친구가 방금 새 컴퓨터를 샀다. 그 친구가 지금까지 샀던 가장 강력한 컴퓨터는 공학용 전자 계산기였다. 그런데 그 친구는 새 컴퓨터의 모니터보다 공학용 계산기에 있는 LCD 디스플레이가더 좋다며 크게 실망하고 말았다. 그 친구를 만족시킬 수 있도록 숫자를 LCD 디스플레이 방식으로 출력하는 프로그램을 만들어보자.
입력:입력파일은 여러 줄로 구성되며 표시될 각각의 숫자마다 한 줄씩 입력된다. 각 줄에는 s와 n이라는 두 개의 정수가 들어있으며 n은 출력될 숫자(0<=n<=99999999),s는 숫자를 표시하는 크기(1<=s<=10)를 의미한다. 0이 두 개 입력된 줄이 있으면 입력이 종료되며 그 줄은 처리되지 않는다.
출력:입력파일에서 지정한 숫자를 수평 방향은 '0'기호를, 수직 방향은 '|'를 이용해서 LCD 디스플레이 형태로 출력한다. 각 숫자는 정확하게 s+2개의 열, 2s+3개의 행으로 구성된다. 마지막 숫자를 포함한 모든 숫자를 이루는 공백을 스페이스로 채워야 한다. 두 개의 숫자 사이에는 정확하게 한 열의 공백이 있어야 한다.
풀이 : 각 숫자의 모양을 배열에 저장해놓고, 숫자별로 숫자의 모양 중 세로의 위치 여부 hor[가로][세로],가로의 위치여부를 ver[가로][세로]를 미리 정해둔다.
그리고 미리 저장해둔 문자열(hor_bar)을 이용하여 hor_bar의 적절한 위치에 NULL 문자를 끼워넣어 간단하게 나타내었다.
알고리즘이 테트리스의 모양 블럭의 위치여부를 나타내는 것과 비슷하다.
소스코드
#include <stdio.h>
#include <string.h>
#define MAX_S 10
#define MAX_DIGITS 8
void main(void)
{
int s,i,j,digit,num_digits;
char number[MAX_DIGITS+1];
char hor_bar[2][MAX_S +1] = {" ","----------"};
char ver_bar[2][2] = {" ","|"};
char hor[10][3] = {{1, 0, 1}, {0, 0, 0}, {1, 1, 1},{1, 1, 1}, {0,1,0},
{1,1,1}, {1,1,1}, {1,0,0,}, {1,1,1}, {1,1,1}};
char ver[10][4] = {{1,1,1,1},{0,1,0,1},{0,1,1,0},{0,1,0,1},
{1,1,0,1},{1,0,0,1},{1,0,1,1},
{0,1,0,1},{1,1,1,1},{1,1,0,1}};
char result[5][(MAX_S +3) * MAX_DIGITS];
scanf("%d",&s);
while( s!=0) {
for(i=0;i<5;i++)
result[i][0] = '\0';
hor_bar[0][s] = '\0';
hor_bar[1][s] = '\0';
scanf("%s",number);
num_digits = strlen(number);
for(i=0;i< num_digits;i++)
{
digit = number[i] - '0';
if(i>0)
for(j=0;j<5;j++)
strcat(result[j]," ");
strcat(result[0], " ");
strcat(result[0], hor_bar[hor[digit][0]]);
strcat(result[0], " ");
strcat(result[1],ver_bar[ver[digit][0]]);
strcat(result[1],hor_bar[0]);
strcat(result[1],ver_bar[ver[digit][1]]);
strcat(result[2], " ");
strcat(result[2],hor_bar[hor[digit][1]]);
strcat(result[2], " ");
strcat(result[3],ver_bar[ver[digit][2]]);
strcat(result[3],hor_bar[0]);
strcat(result[3],ver_bar[ver[digit][3]]);
strcat(result[4], " ");
strcat(result[4],hor_bar[hor[digit][2]]);
strcat(result[4], " ");
}
puts(result[0]);
for(i=0;i<s;i++)
puts(result[1]);
puts(result[2]);
for(i=0;i<s;i++)
puts(result[3]);
puts(result[4]);
putchar('\n');
hor_bar[0][s] = ' ';
hor_bar[1][s] = '-';
scanf("%d",&s);
}
}
'2009~2014 > C/C++' 카테고리의 다른 글
[C언어 기출문제&풀이] 인터프리터(Interpreter) (0) | 2011.05.14 |
---|---|
[C언어 기출문제&풀이] 그래픽 편집기(Graphical Editor) (0) | 2011.05.13 |
[C언어 기출문제&풀이] 여행(the trip) (0) | 2011.05.13 |
[C언어 기출문제&풀이] 지뢰찾기(minesweeper) (0) | 2011.05.13 |
[C언어 기출문제&풀이] 최대공약수 (0) | 2011.05.13 |