#include <iostream>
#include <cstdlib>
int main()
{
//2중 for 문의 총 반복은 바깥족 for문 반복 * 안쪽 for문 반복 수 만큼 동작.
//중첩 for문은 잘못 쓰면 계산이 엄청나게 늘어날 수 있다. 성능 저하의 원인이 될 수 있음.
//3중 for문은 왠만하면 안 쓰긴 하는데, 3d 공갈 분할 같은 데서 간혹 쓸 수도 있음.
for (int i = 0; i < 5; ++i)
{
for (int j = 0; j < 5; ++j)
{
for (int k = 0; k < 5; ++k)
{
std::cout << "i : " << i << ", j : " << j <<
", k : " << k <<std::endl;
}
}
}
printf("\n");
//예제)구구단을 이중 for문으로 출력하기
/*
TIP)뭔가를 구현하고자 할 때는 결과를 미리 적어 놓고
가장 먼저 공통점과 규칙을 찾는 것이 좋다.
뭔가를 구현하려면 낮은 단계부터 하나하나
*/
/*
2 * 1 = 2
2 * 2 = 4
.
.
.
3 * 1 = 3
3 * 2 = 6
.
.
9 * 9 = 81
*발견한 규칙들
- 2단 규칙: 2 는 고정, 뒤에 곱해는 수가 1~9까지 차례로 증가한다.
- 3단 규칙: 3은 고정. 뒤에 곱해지는 수가 1 ~ 9까지 차례로 증가한다.
.
.
- 9단 규칙: 9는 고정. 뒤에 곱해지는 수가 1 ~ 9까지 차례로 증가한다.
- 뒤에 곱해지는 수는 무조건 1 ~ 9 까지 차례로 증가를 하게 된다.
- 앞의 단은 2 ~ 9까지 1씩 증가를 한다.
*/
for (int i = 2; i <= 9; ++i)
{
for (int j = 1; j <= 9; ++j)
{
std::cout << i << " * " << j << " = " << i * j << std::endl;
}
}
printf("\n*****별 그리기*****\n");
int lineCount = 0;
std::cout << "Line : ";
std::cin >> lineCount;
/*
0*
1**
2***
3****
4*****
앞으로는 숫자 시작을 0부터라고 생각할것
각 줄마다 별이 1개씩 늘어난다.
전체 5줄이다.
한 줄이 끝나면 개행한다.
i=줄번호, j=줄번호 + 1만큼 별을 입력
*/
for (int i = 0; i < lineCount; ++i)
{
for (int j = 0; j < i + 1; ++j)
{
std::cout << "*";
}
std::cout << std::endl;
}
printf("\n");
/*
*****
****
***
**
*
줄이 거듭될수록 1씩 감소
각 줄마다 별이 1개씩 감소한다.
총 5줄이다.
한 줄이 끝나면 개행한다.
*/
for (int i = lineCount; i > 0; --i)
{
for (int j = 0; j < i; ++j)
{
std::cout << "*";
}
std::cout << std::endl;
}
/*
0 *
1 **
2 ***
3 ****
4*****
각 줄마다 별이 1개씩 증가한다.
공백은 4개부터 시작하여 각 줄마다 1개씩 감소한다.
총 5줄이다.
한 줄이 끝나면 개행한다.
별의 출력은 공백 다음에 출력을 한다. -> 공백을 먼저 출력하고 별을 출력한다.(우선순위)
총 반복 횟수 = (안쪽 j문 + 안쪽 j문) * 2
*/
for (int i = 0; i < lineCount; ++i)
{
for (int j = 0; j < (lineCount - 1 - i); ++j)
{
std::cout << " ";
}
for (int j = 0; j < (i + 1); ++j)
{
std::cout << "*";
}
std::cout << std::endl;
}
/*
*
***
*****
*******
별 : 1, 3, 5, 7 -> 홀수로 2개씩 증가: 2n - 1
공백 : 3, 2, 1, 0 -> 1개씩 감소
공백을 먼저 출력.
총 4줄
*/
for (int i = 0; i < lineCount; ++i)
{
for (int j = 0; j < (lineCount - 1 - i); ++j)
{
std::cout << " ";
}
for (int j = 0; j < 2*(i+1)-1; ++j)
{
std::cout << "*";
}
std::cout << std::endl;
}
//숙제
/*
*
***
*****
*******
*****
***
*
총 7줄
4줄까지는 공백은 감소, 별은 증가
5줄부터는 공백은 증가, 별은 감소
공백: 3 2 1 0 1 2 3
별:
-3 1
-2 3
-1 5
0 7
1 5
2 3
3 1
*/
//내 풀이
std::cout << "입력한 줄이 짝수이면 한 줄이 감소합니다~";
lineCount = lineCount / 2;
for (int i = -lineCount; i < (lineCount + 1); ++i) //-3,-2,-1,0,1,2,3
{
for (int j = 0; j < abs(i); ++j)
{
std::cout << " ";
}
for (int j = 0; j < (lineCount * 2 - 1) - abs(2 * i); ++j)
{
std::cout << "*";
}
std::cout << std::endl;
}
/*
선생님 풀이
공백은 3,2,1,0,1,2,3으로 출력.
*/
std::cout << "선생님풀이 Line : ";
std::cin >> lineCount;
if (lineCount % 2 == 0)
++lineCount;
int half = lineCount / 2;
for (int i = 0; i < lineCount; ++i)
{
int lineNumber = i;
//가운데 밑부분일 경우
if (i > half)
{
//4 = 2, 5 = 1, 6 = 0
lineNumber = lineCount - 1 - i;
}
for (int j = 0; j < (lineCount - 2 - lineNumber); ++j)
{
std::cout << " ";
}
for (int j = 0; j < 2 * (lineNumber + 1) - 1; ++j)
{
std::cout << "*";
}
std::cout << std::endl;
}
//7줄일때 3이 가운데줄.
//7/2=3
//TIP 세로로 블록 걸기: ALT+드래그
/*
여러 main.cpp 만들기
컴파일러는 어떤 것을 main으로 구동해야할 지 알아서 인식하지 못함.
그러므로 우리가 직접 main으로 사용할 cpp 파일을 지정해 주어야 함.
파일 우클릭 -> 속성 -> 빌드에서 제외
*/
return 0;
}
'C++기초' 카테고리의 다른 글
22년 3월 15일(3) - random (0) | 2022.03.17 |
---|---|
22년 3월 15일(2) - while (0) | 2022.03.17 |
22년 3월 15일 (0) | 2022.03.17 |
22년 3월 8일 (0) | 2022.03.17 |
22년 3월 7일 (0) | 2022.03.17 |