F.R.I.D.A.Y.

지식인 : 두번 째로 큰 수, 두번 째로 작은 수 본문

외부활동/지식in

지식인 : 두번 째로 큰 수, 두번 째로 작은 수

F.R.I.D.A.Y. 2018. 11. 12. 16:16
반응형

지식인 주소:  https://kin.naver.com/qna/detail.nhn?d1id=1&dirId=1040101&docId=314232750&viewType=original


배열 사용 안한다는 점에서 신박해서 풀어봄




 해결 코드 문제 파악 못한채로 푼 코드 :  위에 코드는 내가 문제를 잘못 이해해서 두번째로 큰 수를 출력하는 코드로 작성했다. 그래서 아침에 수정함. 수정된 코드는 이 코드 아래에.


#include <stdio.h>

int main(void) {

	int num, first, second;
	num = first = second = 0;
	do {	//무조건 한 번 이상 받아야하므로 do-while을 사용했습니다.
		scanf("%d", &num);
		
		if (first < num) {	// 만일 받은 값이 first보다 크면
			second = first;	// second 값을 first 값에 넣고
			first = num;	// first 값을 받은 값으로 설정합니다.
		}
		else if (second < num) { // 만일 second 값이 받은 값보다 작으면
			second = num;		 // second 값을 받은 값으로 설정합니다.
		}
		
	} while (num);	//받은 값이 0이면 반복을 종료합니다.

	if (second < 2) { //second가 2 미만이면
		second = first;	//second 값을 first의 값으로 설정합니다.
		if (second < 2) { // first를 수정했으므로 재 검사 합니다.
			second = -1;
		}
	}
	printf(" -> %d\n", second);

}


수정된 코드:

#include <stdio.h>

int main(void) {

	int num, smallest, sec_small;
	scanf("%d", &num);	// 처음 비교를 위해 따로 받습니다.

	smallest = sec_small = _CRT_INT_MAX;	
	// 작은 값을 비교하므로 int 자료형이 가질 수 있는 가장 큰 값을 넣어 놓습니다.

	while (num) {
		if (num < smallest) { // 받은 값이 가장 작은 값보다 작으면
			sec_small = smallest;	// 두번 째로 작은 값을 가장 작은 값으로 넣고
			smallest = num;			// 받은 값을 가장 작은 값을 저장하는 변수에 넣습니다.
		}
		else if (num < sec_small) {	// 만일 두번 째로 작은 값이 받은 값보다 크면
			sec_small = num;		// 받은 값을 두번 째로 작은 값에 넣습니다.
		}
		scanf("%d", &num);

	}

	printf("%d\n", sec_small);		// 두번 째로 작은 값을 출력합니다.

	return 0;
}



728x90
반응형
Comments