C언어 : 결과가 중복으로 나오는 경우에 최소 박스인 경우만 나오도록 만들고 싶음
조회수 681회
3KG과 5KG의 박스에 12~17KG의 설탕을 상자의 무게가 남지 않으면서 최소가 되도록 담는 문제입니다.
제가 작성한 코드에서 중복으로 나오는 경우에 최소 박스인 경우만 나오도록 만들고 싶은데 어떤 문장을 추가해야할지 모르겠습니다.
#include<stdio.h>
int main(void) {
int i, box_5, box_3; //반복변수, 5kg 상자 개수, 3kg 상자 개수
for (i = 12; i <= 17; i++) // 설탕 키로수 범위에서 반복한다.
{
for (box_5 = 0; box_5 <= 3; box_5++) // 5kg상자 개수(0개~3개=>0~15kg) 범위에서 반복한다.
{
for (box_3 = 0; box_3 <= 5; box_3++) // 3kg상자 개수(0개~5개=0~15kg) 범위에서 반복한다.
{
if (i == 5 * box_5 + 3 * box_3) // 설탕 총 키로수=5*5kg상자개수+3*3kg상자개수이다.
{
printf("%dkg : 5kg %d박스, 3kg %d박스\n", i, box_5, box_3);
}
}
}
}
return 0;
1 답변
-
3중반복문은 너무 무거워요.
#include<stdio.h> int main(void) { int i, box_5, box_3; //반복변수, 5kg 상자 개수, 3kg 상자 개수 for (i = 12; i <= 17; i++) // 설탕 키로수 범위에서 반복한다. { for (box_5 = 0; box_5 <= 3; box_5++) // 5kg상자 개수(0개~3개=>0~15kg) 범위에서 반복한다. { for (box_3 = 0; box_3 <= 5; box_3++) // 3kg상자 개수(0개~5개=0~15kg) 범위에서 반복한다. { if (i == 5 * box_5 + 3 * box_3) // 설탕 총 키로수=5*5kg상자개수+3*3kg상자개수이다. { printf("%dkg : 5kg %d박스, 3kg %d박스\n", i, box_5, box_3); break; } } } } return 0; }
- 15KG의 경우가 두 번 실행되는 것이 현재 문제입니다..3중 반복문 말고 다른 방법으로 풀어야할까요..? songhee0611 2021.5.3 16:37
- 지금 상태에서 처리하라고 하면... 첫번째 for 직전에 배열을 하나 만들고, 제일 안쪽 if 걸릴 때마다 그 배열에 상자 몇개짜리인지 '후보'를 추가하고, 첫번째 for 끝나기 직전에 그 후보들 중에서 최소인 놈만 찾아서 print하는 식으로 가야겠네요. 이게 맞을지 모르겠지만.. 엽토군 2021.5.3 22:56
댓글 입력