IT’s Portfolio

[C] 알고리즘 - 랜덤 정수들 중 두 번째로 큰 값 출력하기 본문

Development Study/C

[C] 알고리즘 - 랜덤 정수들 중 두 번째로 큰 값 출력하기

f1r3_r41n 2020. 6. 28. 19:18
728x90
반응형

* 조건 *

① 사용자로부터 랜덤하게 생성할 수의 개수 입력받음.

② 랜덤하게 생성되는 수의 범위 : 1~30

③ 무한루프, 사용자에게 반복 여부를 확인해 Y가 입력되면 재수행, N이 입력되면 프로그램 종료

 

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void printData(int size, int rand_num1[]) {
	// 랜덤으로 받은 값을 출력해줌.
	for (int i = 0; i < size; i++) {
		// 8개씩 출력
		if (i % 8 == 0) {
			printf("\n");
		}
		printf("%d\t", rand_num1[i]);
	}
}

int findSecond(int size1, int rand_num2[]) {
	int first, second;
	int answer = 0;

	first = second = 0;

	for (int i = 0; i < size1; i++) {
		// 배열값이 first 값보다 크면 second에는 first 값을 저장하고 first 값에 배열값을 저장한다.
		// 위의 조건을 만족하지 않고 배열값이 second 값보다 크고 first 값과 배열값이 같지 않다면 second 값에 배열값을 저장한다.
		if (rand_num2[i] > first) {
			second = first;
			first = rand_num2[i];
		}
		else if (rand_num2[i] > second && rand_num2[i] != first) {
			second = rand_num2[i];
		}
	}
	
	answer = second;

	return answer;
}

void main() {
	while (1) {
		int num;
		char re = "\0";

		while (1) {
			printf("생성할 숫자의 개수를 입력하세요(최대 20개): \n");
			scanf_s("%d", &num);

			if (num <= 20) {
				break;
			}
			else {
				printf("너무 많습니다. 재입력하세요.\n");
			}
		}

		// malloc : 메모리를 동적으로 할당하는 함수
		int* rand_num = malloc(sizeof(int) * num);

		// rand 값을 뽑기 위한 초기화 코딩
		srand(time(NULL));

		for (int i = 0; i < num; i++) {
			// 범위 랜덤값 뽑기 : rand() % ((마지막값 - 시작값) + 1) + 시작값
			rand_num[i] = rand() % ((30 - 1) + 1) + 1;
		}

		printData(num, rand_num);

		int answer = findSecond(num, rand_num);

		if (answer == 0) {
			printf("\n두 번째로 큰 수는 없습니다.\n");
		}
		else {
			printf("\n두 번째로 큰 수는 %d입니다.\n", answer);
		}

		// 엔터값 없애주는 코드
		rewind(stdin);
		printf("다시 하시겠습니까? (Y or N)\n");
		scanf_s("%c", &re);

		if ((int)re == 89) {
			continue;
		}
		else if ((int)re == 78) {
			break;
		}
	}
}

 

실행

728x90
반응형
Comments