별찍기_기초
j0 | j1 | j2 | j3 | j4 | |
i0 | * | * | * | * | * |
i1 | * | * | * | * | * |
i2 | * | * | * | * | * |
i3 | * | * | * | * | * |
i4 | * | * | * | * | * |
위의 사진을 표로 나타내었다.
j는 하나의 별을 반복 출력 하기위한 내부 틀이며
i는 j를 몇 줄 출력할지 반복하기 위한 외부 틀이 될것이다.
#include <stdio.h>
int main()
{
int i, j;
for(i=0; i<5; i++) //외부 반복 틀 (총 5번 반복)
{
for(j=0;j<5;j++) //내부 반복 틀 (총 25번 반복(내부*외부))
{
printf("*");
}
printf("\n"); //내부 반복이 끝나면 한 줄 띄어쓰기
}
return 0;
}
별찍기_비스듬한 계단
j0 | j1 | j2 | j3 | j4 | j5 | |
i0 | * | * | ||||
i1 | 공백 | * | * | |||
i2 | 공백 | 공백 | * | * | ||
i3 | 공백 | 공백 | 공백 | * | * | |
i4 | 공백 | 공백 | 공백 | 공백 | * | * |
위의 표에서 규칙을 찾아보자.
공백 먼저 출력 후 별을 출력해야하는 규칙과,
공백은 0~4까지 순차적으로 늘어난다는 규칙을 알 수 있다.
그리고 아래 코드와같이 반복문 외부에서 변수를 출력할 일이 없을땐 반복문 초기식 안에서 변수를 선언해주어도 된다.
j, k는 i처럼 타 변수와 비교할 일이 없으므로 k를 j로 써줘도 되지만 헷갈릴까봐 변수 이름을 3개 사용했다.
#include <stdio.h>
int main()
{
for(int i=0; i<5; i++) //총 5줄이 반복 출력된다.
{
for(int j=0; j<i; k++) //공백은 0부터 시작해서 i보다 작을때까지 반복한다. (i2(3번째 줄)면 j0,j1 2번 출력)
{
printf(" ");
}
for(int k=0; k<2; k++) //별은 k0, k1 두 번 출력을 반복한다.
{
printf("*");
}
printf("\n"); //내부 반복문들이 끝나면 한 줄 띄운다.
}
}
별찍기_피라미드 (정방향)
j0 | j1 | j2 | j3 | j4 | j5 | j6 | j7 | j8 | |
i0 | 공백 | 공백 | 공백 | 공백 | * | ||||
i1 | 공백 | 공백 | 공백 | * | * | * | |||
i2 | 공백 | 공백 | * | * | * | * | * | ||
i3 | 공백 | * | * | * | * | * | * | * | |
i4 | * | * | * | * | * | * | * | * | * |
공백은 4~0순으로 감소하면 된다.
별의 규칙을 살펴보자. '1, 3, 5, 7, 9' 즉, 2씩 늘어난다.
처음엔 감을 못잡았다. '어떻게 i 값에 따라 첫줄에 1개만 쓰고 이후 2개씩 늘어나게 하지??' 하고..
i 값에 따라 늘어나야 하므로 아래와 같이 i*2+1을 해주었다.
*첫 줄은 별을 1개만 출력해야 하므로 i0일땐 0*2+1 = 1
#include <stdio.h>
int main()
{
for(int i=0; i<5; i++) //외부 반복문 (5번 반복)
{
for(int j=0; j<5-i; j++) //공백 반복 (i0 = j<5-0 = 4번 반복)
{
printf(" ");
}
for(int k=0; k<i*2+1; k++) //별 반복 (i0 = k<0*2+1 = 0번 반복)
{
printf("*");
}
printf("\n"); //내부 반복이 끝나면 한 줄 띄어쓰기
}
}
별찍기_피라미드 (역방향)
j0 | j1 | j2 | j3 | j4 | j5 | j6 | j7 | j8 | |
i0 | * | * | * | * | * | * | * | * | * |
i1 | 공백 | * | * | * | * | * | * | * | |
i2 | 공백 | 공백 | * | * | * | * | * | ||
i3 | 공백 | 공백 | 공백 | * | * | * | |||
i4 | 공백 | 공백 | 공백 | 공백 | * |
정방향도 했는데 역방향은 쉽지 않을까? 했지만 내 머리로는 쉽지 않았다.
공백은 i 값과 동일하게 늘어나면 된다지만 별은..
별의 왼쪽이 n개가 없어지면 오른쪽도 n개가 없어진다. 또한 i의 값과 왼쪽, 오른쪽의 별이 사라지는 수는 동일하다.
별의 최대 출력수는 9개다. 고로 9개에서 i*2를 빼주면 된다.
#include <stdio.h>
int main()
{
for(int i=0; i<5; i++) //외부 반복문
{
for(int j=0; j<i; j++) //공백 반복 (i2 = j<2 = j0,j1 = 2번 반복)
{
printf(" ");
}
for(int k=0; k<9-i*2; k++) //별 반복 (i2 = k<9-2*2 = k<5 = k0,k1,k2,k3,k4 = 5번 반복)
{
printf("*");
}
printf("\n"); //내부 반복이 끝나면 한 줄 띄어쓰기
}
}
'개발일기 > C언어(C,C++)' 카테고리의 다른 글
[C/C++] Mac에서의 VScode C언어 환경 구축하기2 (tasks.json) (0) | 2021.08.22 |
---|---|
[C/C++] Mac에서의 VScode C언어 환경 구축하기1 (Code Runner) (0) | 2021.08.13 |