어떤 수 n을 입력받으면 다음과 같은 삼각형을 출력한다.
여기서 입력되는 n은 반드시 홀수이다.
(본 내용은 필자의 주관적인 생각입니다.)
이 코드를 짤때 먼저 공백을 0으로 표현해서 짜면 코드이해가 쉽다.
00*
0***
*****
먼저 기본적인 생각은 이코드를 짤때 공백으로된 역직각삼각형하나와 *로된 직각삼각형을 찍으면 된다.
하지만 다른점은 한포문에서 두개의포문을 실행해서 한줄에서 공백과*을 찍어야한다는 점이다.
그리고 1-3-5-7 이런식으로 홀수를 *로 출력하는것은 입력한값만큼 반복하면서 홀수일때만 *을 출력하고,
공백은 새로운 변수를만들어서 처음에 입력받은값을 저장한다음 /2 연산을 실행하면 공백을 출력해야되는 최대값이나온다.
이것은 반복하면서 홀수일때 *을 출력하는것과 동시에 그 최대값부터 공백을 출력하면서 계속해서 값을 줄여나가면 풀수있다.
정리
1. 조건문으로 홀수인지 아닌지 검사한다.
2. 공백을 출력하는 반복문의 최대값은 입력값/2 이고, *을 출력하는 반복문의 최대값은 입력받은값이다.
3. 공백을 출력하는것은 최대값(입력값/2)부터 1을 감소시키면서 출력하고 *을 출력하는것은 0부터 최대값(입력값)까지 반복하면서 출력한다.
4. 공백을 출력하는 최대값을 새로운변수에 받기때문에 따로 감소를 시켜줘야한다.
- 구조예시(참고용) -
int main() {
for() {
if() {
for() {
}
for() {
}
}
}
}
필자가 짠 코드(위의 설명한 방식대로 짠 코드)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | #include<stdio.h> int main() { int num, i, j, l, k; scanf("%d", &num); k = num / 2; for (i = 1; i <= num; i++) { if (i % 2 == 1) { for (l = k; 0 < l; l--) printf(" "); for (j = 0; j < i; j++) printf("*"); printf("\n"); k--; } } return 0; } | cs |