본문 바로가기
기록 및 문서화/문제

모래시계 만들기

by 1005ptr 2018. 5. 7.
반응형

모래시계 만들기 문제를 풀었다


제약 조건은

1. 10이하의 수

2. 홀수

3. 0이 입력되면 종료되며 반복해서 입력받고 출력한다


출력 모양은

123454321

 2345432

  34543

   454

    5

   454

  34543

 2345432

123454321


코드

/*

* sandClock.c

*

*  Created on: 2018. 5. 7.

*      Author: YS.Bae

*/


#include <stdio.h>

#define CLOCK_SIZE 17

void sandClock(int num);

void initialize(int arr[CLOCK_SIZE][CLOCK_SIZE], int size);

void print(int arr[CLOCK_SIZE][CLOCK_SIZE], int size);


int main(){

printf("모래시계 출력 프로그램, 10이하의 홀수를 입력하세요\n");

printf("0을 누르면 종료됩니다\n");

int num;


while (1){

printf("입력 : ");

scanf("%d", &num);


if (num == 0){

break;

}

else if (num > 10){

printf("10보다 작은 수를 입력하세요\n");

continue;

}

else if (num % 2 == 0){

printf("홀수를 입력해 주세요\n");

continue;

}


sandClock(num);

}


printf("프로그램을 종료합니다");

return 0;

}


void sandClock(int num){

int arr[CLOCK_SIZE][CLOCK_SIZE];

int value;

int clockSize = 2 * num - 1;

initialize(arr, clockSize);


for (int i = 0; i < clockSize; i++){

value = i;

if (i < num){

for (int j = i; j < clockSize - i; j++){

if (j < num)

arr[i][j] = ++value;

else

arr[i][j] = --value;

}

}

else{

value = clockSize - (i + 1);

for (int j = clockSize - (i + 1); j < i + 1; j++){

if (j < num)

arr[i][j] = ++value;

else

arr[i][j] = --value;

}

}

}


print(arr, clockSize);

}


void initialize(int arr[CLOCK_SIZE][CLOCK_SIZE], int size){

for (int i = 0; i < size; i++){

for (int j = 0; j < size; j++){

arr[i][j] = 0;

}

}

}


void print(int arr[CLOCK_SIZE][CLOCK_SIZE], int size){

for (int i = 0; i < size; i++){

for (int j = 0; j < size; j++){

if (arr[i][j] == 0){

printf("   ", arr[i][j]);

}

else{

printf("%3d", arr[i][j]);

}

}

printf("\n");

}

}


반응형

댓글