CS 공부/기초 알고리즘

C언어 별 찍기 공부하기

Jongung 2021. 10. 8. 17:09

for문 구현문제인 별찍기이다. 

1-2학기 중간고사 대비를 위해 문제를 풀어보았다.

 

안이 채워지지 않은 직사각형 구현하기

#include <stdio.h>

int main() {
	int n;
	scanf_s("%d", &n);
	for (int i = 1; i <= n; i++) {

		for (int j = 1; j <= n; j++) {
			if (i == 1 || i == n) { //i가 1이거나 n일때 즉 가로의 두줄
				printf("*");
			}
			else {					
				if (j == 1 || j == n) {//j가 1이거나 n일때 즉 세로의 두줄
					printf("*");
				}
				else {
					printf(" ");
				}
			}
		}
		printf("\n");
	}
}

5일 경우
10일 경우

 

 

다이아몬드(마름모) 구현하기

#include <stdio.h>

int main() {
	int n;
	scanf_s("%d", &n);
	for (int i = 0; i < n; i++) {
		for (int j = n-1; j > i; j--) {
			printf(" ");
		}
		for (int j = 0; j < i * 2 + 1; j++) {
			printf("*");
		}
		printf("\n");
	}
	for (int i = 1; i < n; i++) {
		for (int j = 0; j < i; j++) {
			printf(" ");
		}
		for (int j = n*2; j > i * 2 + 1; j--) {
			printf("*");
		}
		printf("\n");
	}
}

5일 경우
10일 경우

 

1~n까지 한줄에 출력하기, 숫자가 커지면 커진만큼 숫자 출력

#include <stdio.h>

int main() {
	int n;
	scanf_s("%d", &n);
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= i; j++) {
			printf("%d", j);
		}
		printf("\n");
	}
	
}

 

9일경우

 

반대로 감소하는거 출력하기.

#include <stdio.h>

int main() {
	int n;
	scanf_s("%d", &n);
	for (int i = n; i >= 1; i--) {
		for (int j = 1; j <= i; j++) {
			printf("%d", j);
		}
		printf("\n");
	}
}

9일 경우

 

채워지지 않은 다이아몬드, 중간줄이 있음

#include <stdio.h>

int main() {
	int n;
	scanf_s("%d", &n);
	for (int i = 0; i < n; i++) {
		if (i < n/2) {
			for (int j = n/2; j > i; j--) {
				printf(" ");
			}
			for (int j = 0; j < i * 2 + 1; j++) {
				if (j == i * 2 || j == 0) {
					printf("*");
				}
				else {
					printf(" ");
				}
			}
		}
		else if (i == n/2) {
			for (int j = 0; j < n; j++) {
				printf("*");
			}
		}
		else if (i > n / 2) {
			for (int j = 0; j < i - n/2; j++) { 
				printf(" ");
			}
			for (int j = n * 2; j > i * 2 + 1; j--) {
				if (n*2 == j || j == i * 2 + 2) {
					printf("*");
				}
				else {
					printf(" ");
				}
			}
		}
		printf("\n");
	}
}

7일 경우

 

사각형 안에 X

//정수 n(>1, 홀수)에 3,5,7,9가 입력되면 다음과 같은 모양을 출력하는 프로그램을 작성해보자. 짝수가 입력되면 홀수 입력시까지 재입력한다.

#include <stdio.h>

int main() {
	int n;
	scanf_s("%d", &n);
	while ((n < 3 || n >10) || n % 2 != 1) {
		scanf_s("%d", &n);
	}
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < n; j++) {
			if (i == j || i == 0 || i == n - 1 || j == 0 || j == n -1 || i+j == n-1) {
				printf("*");
			}
			else
			{
					printf(" ");
			}
		}
		printf("\n");
	}
}

5일 경우
9일 경우

 

위가 빈 모래시계

//정수 n(>1, 홀수)에 3,5,7이 입력되면 다음과 같은 모양을 출력하는 프로그램을 작성해보자.

#include<stdio.h>
int main() {
	int n = 0;
	scanf_s("%d", &n);
	while (n < 3 || n % 2 == 0) {
		scanf_s("%d", &n);
	}

	for (int i = 0; i < n; i++) {
		if (i < n / 2) {
			for (int j = 0; j < i; j++) {
				printf(" ");
			}
			for (int j = n; j >= i * 2 + 1; j--) {
				if (i == 0 || j== n || j == i * 2 + 1) {
					printf("*");
				}
				else {
					printf(" ");
				}
			}
		}
		else if (i == n / 2) {
			for (int j = 0; j < i; j++) {
				printf(" ");
			}
			printf("*");
		}
		else {
			for (int j = n; j > i+1; j--) {
				printf(" ");
			}
			for (int j = 0; j < (i-(n/2)) * 2 + 1; j++) {
				printf("*");
			}
		}
		printf("\n");
	}
}

 

5일 경우
9일 경우

 

나비 모양

#include <stdio.h>
int main() {
	int n;
	scanf_s("%d", &n);
	while (n % 2 == 0 || n < 1) {
		scanf_s("%d", &n);
	}
	for (int i = 0; i < n * 2 -1; i++) {
		if (n > i+1) {
			for (int j = 0; j<=i; j++) {
				printf("*");
			}
			for (int j = n * 2 - 1; j > i * 2 + 2; j--) {
				printf(" ");
			}
			for (int j = 0; j <= i; j++) {
				printf("*");
			}
		}
		else if (n == i + 1) {
			for (int j = 0; j < n * 2 - 1; j++) {
				printf("*");
			}
		}
		else {
			for (int j = n*2 - 1; j > i; j--) {
				printf("*");
			}
			for (int j = n * 2; j < i * 2 + 1; j++) {
				printf(" ");
			}
			for (int j = n * 2 - 1; j > i; j--) {
				printf("*");
			}
		}
		printf("\n");
	}
}

5일 경우
9일 경우