얼마 전부터 조선대에서 임베디드SW 강좌를 듣고 있다.
첫 날, 반 편성 고사(?)때 사용자로부터 숫자 하나를 입력 받아서, 다음과 같은 다이아몬드 모양을 출력하는 프로그램을 만들라는 문제가 나왔다. (단, 입력 받은 숫자는 홀수라고 가정한다.)
사용자가 입력한 숫자가 5인 경우
*
***
*****
***
*
그리 어려운 문제도 아니었고, 시간도 충분히 주어졌음에도 불구하고, 그 때 난 이 문제를 풀지 못했다.
지금은 풀 수 있지만...
혹시, 프로그래밍에 관심 있으신 분들은 한 번 이 문제에 도전해 보시길...
내가 생각해낸 방법은 다음 두 가지 방법이다.
첫 번째 방법..
#include <stdio.h>
int number;
void printline(int star)
{
int i;
for (i = 0; i < (number - star) / 2; ++i) {
printf(" ");
}
for (i = 0; i < star; ++i) {
printf("*");
}
printf("\n"); // new line
}
int main()
{
int i;
scanf("%d", &number);
for (i = 1; i < number; i += 2) {
printline(i);
}
for (i = number; i > 0; i -= 2) {
printline(i);
}
return 0;
}
두 번째 방법..
#include <stdio.h>
int main()
{
int number, middle;
int i, j;
int offset;
scanf("%d", &number);
middle = number / 2 + 1;
for (i = 1; i <= number; ++i) {
for (j = 1; j <= number; ++j) {
offset = i < middle ? i - 1 : number - i;
if ( (j >= middle - offset) && (j <= middle + offset) ) {
printf("*"); // star
} else {
printf(" "); // space
}
}
printf("\n"); // new line
}
return 0;
}