Programming/C & C++

[C++] 다양한 별 찍기 문제 연습

만나쓰 2020. 7. 26. 19:51

!!  내 맘대로,정리되지 않은 소스코드입니다. 주의 !!

 

 

[별 찍기 1-1] 빈칸(공백) 고려하지 않는 기본적인 별 찍기 문제

 

 

#include<iostream>
using namespace std;

int main() {
	int n;
	cin >> n;

	for (int i = 0; i < n; i++) {
		for (int j = 0; j < i + 1; j++) {
			cout << "*";
		}
		cout << endl;
	}


	return 0;
}

 

 

 

 

 

 

 

 

 

[별 찍기 1-2] 빈칸(공백) 고려하지 않는 기본적인 별 찍기 문제

 

#include<iostream>
using namespace std;

int main() {
	int n;
	cin >> n;

	
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < n - i; j++) {
			cout << "*";
		}
		cout << endl;
	}

	return 0;
}

 

 

 

 

 

 

 

 

 

 

[별 찍기 1-3] 빈칸(공백) 고려하지 않는 기본적인 별 찍기 문제 (1-1 문제 + 1-2 문제)

 

 

 

#include<iostream>
using namespace std;

int main() {
	int n;
	cin >> n;

	for (int i = 0; i < n; i++) {
		for (int j = 0; j < i + 1; j++) {
			cout << "*";
		}
		cout << endl;
	}
	n--;
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < n - i; j++) {
			cout << "*";
		}
		cout << endl;
	}

	return 0;
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

[별 찍기 2-1] 빈칸(공백) 고려하는 별 찍기 문제 (왼쪽에 공백 존재)

왼쪽에 빈칸(공백) 존재

#include<iostream>
using namespace std;

int main() {
	int n;
	cin >> n;

	for (int i = 0; i < n; i++) {
		for (int j = 1; j <= n; j++) {
			if (i > 0 && j <= i) {
				cout << " ";
			}
			else {
				cout << "*";
			}
		}
		cout << endl;
	}
	

	return 0;
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

[별 찍기 2-2] 에 빈칸(공백) 존재  

 

양쪽에 공백 존재

 

소스코드 설명 아래 참고

 

위의 소스코드 설명 ("_"은 빈칸을 의미)

 

 

<사용한 변수 설명>

 

- n :  입력 받은 수  =  의 갯수 

- x :  (2n -1)  =  의 갯수

 

 

 

#include<iostream>
using namespace std;

int main() {
	int n ;
	cin >> n;
	int x = 2 * n - 1;


	for (int i = 0; i < n; i++) {
		for (int j = 1; j <= x; j++) {
			if (i > 0 && (j <= i || j > x-i)) {
				cout << " ";
			}
			else {
				cout << "*";
			}
		}
		cout << endl;
	}
	

	return 0;
}

 

 

 

 

 

 

 

 

 

 

[별 찍기 2-3] 양쪽에 빈칸(공백) 존재  (2-4 문제와 비교하기)

양쪽에 공백 존재

 

17번째 줄 "j > i+1"은 오른쪽 공백을 생성한다.

 

 

<사용한 변수와 설명>

 

- n :  입력 받은 수  =  의 갯수 

- x :  (2n -1)  =  의 갯수

 

- 소스코드에서 17번째 줄에서 "j > i+1"은 오른쪽 공백을 생성한다.

- 소스코드에서 12번째와 16번째 줄의 "if - else if 문"은 아래의 사진처럼 대칭을 기준으로 나눠서 구현한 것이다.

 

#include<iostream>
using namespace std;

int main() {
	int n ;
	cin >> n;
	int x = 2 * n - 1;


	for (int i = 0; i < x; i++) {
		for (int j = 1; j <= x; j++) {
			// i < n 일 경우
			if (i > 0 && i < n && (j <= i || j > x - i)) {
				cout << " ";
			}
			// i >= n 일 경우  -> i를 x-i-1 로 변경 (오른쪽에도 공백 만들기)
			else if (i >= n && (j < x - i || j > i + 1)) { 
				cout << " ";
			}
			else {
				cout << "*";
			}
		}
		cout << endl;
	}
	

	return 0;
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

[별 찍기 2-4] 왼쪽에 빈칸(공백) 존재, 오른쪽 빈칸(공백) 존재하지 않음  (2-3문제와 비교하기)

 

왼쪽에만 공백 존재, 오른쪽은 공백 없음

 

"_" (빈칸)을 의미, 왼쪽에만 "_" (빈칸)이 존재한다.

 

 

아래에 소스코드 설명 있음
소스코드에서 12, 20번째 줄 설명

소스코드에서 12번째와 20번째 줄의 if - else if 문은 위의 사진처럼 대칭을 기준으로 나눠서 구현한 것이다.

 

#include<iostream>
using namespace std;

int main() {
	int n ;
	cin >> n;
	int x = 2 * n - 1;


	for (int i = 0; i < x; i++) {
		for (int j = 1; j <= x; j++) {
			if (i < n ) {
				if (i > 0 && j <= i) {	// i == 0 (첫번째 행)을 제외
					cout << " ";		// " " 빈칸 생성
				}
				else if (j <= x - i) {
					cout << "*";		// "*" 별 생성
				}
			}
			else if (i >= n) { // 대칭 시작부터 
				if (j < x - i) {
					cout << " ";		// " " 빈칸 생성
				}
				else if (j <= i + 1) {
					cout << "*";		// "*" 별 생성
				}				
			}	
		}
		cout << endl;
	}
	

	return 0;
}