세 값의 최댓값을 구해라.
#include <stdio.h>
int main(void)
//문제는 세 정수를 받고 그 중에서 최대값을 구하는 문제다.
{
int a, b, c;
int max;
printf("세 수를 입력하세요 : ");
scanf_s("%d", &a);
scanf_s("%d", &b);
scanf_s("%d", &c);
max = a;
if (b > max) max = b;
if (c > max) max = c;
printf("%d", max);
}
int Mid(int a, int b, int c)
{
if (a >= b)
if (b >= c)
return b;
else if (a <= c)
return a;
else
return c;
else if (a > c)
return a;
else if (b > c)
return c;
else return b;
}
int main()
{
int a, b, c;
printf("세 정수의 중앙값을 구하세요. : \n");
printf("a의 값 :"); scanf_s("%d", &a);
printf("b의 값 :"); scanf_s("%d", &b);
printf("c의 값 :"); scanf_s("%d", &c);
printf("%d", Mid(a, b, c));
}
반복 숙달해야되는 문제다. 결정 트리를 이용한 대표적인 예제였지만 필수적으로 알아야 된다.
중앙 값을 구하는 예제를 다른 방법으로도 구현이 가능하다.
int Mid(int a, int b, int c)
{
if ((b >= a && c <= a) || (b <= a && c >= a)) // b-a-c || c-a-b
return a;
else if ((a > b && c < b) || (a < b && c > b)) // a-b-c || c-b-a
return b;
return c; // 그게 아니라면 c
}
int main()
{
int a, b, c;
printf("세 정수의 중앙값을 구하세요. : \n");
printf("a의 값 :"); scanf_s("%d", &a);
printf("b의 값 :"); scanf_s("%d", &b);
printf("c의 값 :"); scanf_s("%d", &c);
printf("%d", Mid(a, b, c));
}
결과는 동일하게 나온다. 차이점이 무엇일까? 밑 예제는 같은 연산을 반복하기 때문에 비효율적이다. (1번 조건을 분석 후 -> 2번 분석)