C - for문 활용 문제
조회수 387회
int overCheck(sum)
{
// 0원 이하로 내려갔는지 확인
if (sum > 0)
return 1;
else if (sum == 0)
return 0;
else
return -1;
}
int main(void)
{
for (int i = 0; i < 8; i++)
{
int money = 3500;
money -= i * 500; // i = 500원 크림빵
if (overCheck(money) >= 0)
{
for (int j = 0; j < 6; j++)
{
money -= j * 700; // j = 700원 새우깡
if (overCheck(money) >= 0)
{
for (int k = 0; k < 9; k++)
{
money -= k * 400; // k = 400원 콜라
if (overCheck(money) == 0)
{
printf("크림빵(500) : %d, 새우깡(700) : %d, 콜라(400) : %d\n", i, j, k);
}
}
}
}
}
}
}
최대한 간결하게 작성하려 했는데 난잡해 보일 수 있는 점 죄송합니다.
<문제>
500원 크림빵, 700원 새우깡, 400원 콜라를 이용하여 3500원을 남김없이 사용가능 한 경우를 출력하시오.
위와 같은 코드를 만들었는데, 7,0,0 밖에 나오지 않습니다. 왜그럴까요...? ㅠㅠ..
2 답변
-
코드를 돌려본 것은 아니지만, 두번째와 세번째 for문에서 money값을 다시 초기화하지 않고 그대로 사용하는 것이 문제가 되었을 것 같습니다.
첫 번째 for문에서는 3500원으로 초기화하는데, 이후의 for문에서는 money에서 500 * i를 뺀 money값을 반복적으로 사용합니다.
예를 들어, i=1일 경우 money=3000 일 텐데, 이 때 j=0, k=1이 되면 money=2600이 됩니다.
동일하게 i=1, j=0일 때 k=2가 되면 money=2200이 되어야 맞지만, 작성하신 코드상에서는 money=1800이 되어 원하는 값을 얻을 수 없게 됩니다.
따라서 j, k 값과 무관하게 3500을 전부 사용할 수 있는 (7, 0, 0)만 정답으로 출력되는 것입니다.
조금만 고민해 보시면 해결하실 수 있으실 거예요!
-
제가 작성한 코드 올려드려요 참고해보세요
결과
500원 0개, 700원 1개, 400원 7개
500원 0개, 700원 5개, 400원 0개
500원 1개, 700원 2개, 400원 4개
500원 2개, 700원 3개, 400원 1개
500원 3개, 700원 0개, 400원 5개
500원 4개, 700원 1개, 400원 2개
500원 7개, 700원 0개, 400원 0개
#include "stdafx.h" #define WON_500 (500) #define WON_700 (700) #define WON_400 (400) #define WON_MAX (3500) int _tmain(int argc, _TCHAR* argv[]) { int i, j, k; int sum = 0; for(i = 0;i < 100;i++) { for(j = 0;j < 100;j++) { for(k = 0;k < 100;k++) { if(((i * WON_500) + (j * WON_700) + (k * WON_400)) == WON_MAX) printf("500원 %d개, 700원 %d개, 400원 %d개\n", i, j, k); } } } while(1); return 0; }
댓글 입력