2013-10-06 2 views
-1

최소 변경 가능 횟수를 입력해야합니다. 입력 한 케이스 수에는 각 동전의 수 (1은 반드시 그 중 일부는 아님)와 원하는 수의 숫자가 있습니다 테스트. 그럼 다른 동전과 테스트 할 다른 번호를 입력하십시오.최소 변경 금액 C++

내 프로그램이 왜 작동하지 않는지 알지 못합니다. 변경 사항 중 일부는 반드시 필요하지 않으므로 조금 프로그램을 수정해야했습니다.

#include "stdafx.h" 
#include<iostream> 
#include<conio.h> 
#include<functional> 
#include<numeric> 
#include<algorithm> 
#include<vector> 

using namespace std; 



int main() 
{ 
    int n,i; 
    cin>>n; 
    int f=n,c,m; 
    int flag=0; 
    int m1; 
    int coins[100]; 
    vector <int>storage(100,0); 
    vector <int> testcases(1000,0); 
    vector <int> answers(1000,-1); 

    while(n>0) 
    { 
     cin>>c; 
     cin>>m; 
     for(i=1;i<=c;i++) 
     { 
      cin>>coins[i]; 
     } 
     for(i=1;i<=c;i++) 
     { 
      cin>>testcases[i]; 
     } 
     m1=*max_element(testcases.begin(),testcases.end()); 
     for(i=0;i<1000;i++) 
     { 
      answers[i]=-1; 
     } 


      i=0; 
      while(m1>=i) 
      { 
       i++; 
       flag=0; 

      for(int j=1;j<=c;j++) 
      { 
       if(i-coins[j]>=0) 
       { 
        storage[j]=answers[i-coins[j]]; 
        flag=1; 
       } 
       else 
       storage[j]=-2; 

      } 
      if(flag==1) 
      {answers[i]=*min_element(begin(storage), end(storage), 
    [](int t1, int t2) {return t1 > 0 && (t2 <= 0 || t1 < t2);}); 

      flag=0; 
      } 
      else 
       answers[i]=0; 


      } 

      if(m1==i) 
      { 
       for(int y=1;y<=m;y++) 
       { 
        cout<<answers[testcases[y]]<<endl; 
       } 
      } 

    } 


return 0; 
} 

편집 : "작동하지 않습니다"에 의해 나는 그것 실제로 나던 할 anything.Its가 입력을 받아,이 무한 루프로가는 생각 아무 것도 아니야 않는 것을 의미한다.

+5

"작동하지 않는"좋은 설명되지 않습니다 : 여기에 가이드입니다. 문제를 지정하십시오. – Appleshell

+0

정교하게 설명하자면 : 프로그램이 컴파일에 실패합니까? (그렇다면 컴파일러에서 어떤 오류가 발생합니까?) 충돌이 발생합니까? 그렇다면 어떻게 컴파일하고 실행합니까? 컴파일 및 실행하지만 예기치 않은 출력을 생성합니까? 그렇다면 출력물은 무엇이며 무엇을 얻으려고합니까? – jalf

+0

글쎄 그것은 나에게 아무런 도움도주지 못한다.하지만 그것은 입력이다. 아무것도하지 않는다. debiugging 것은 inmy 컴파일러를 작동시키지 않는다. – LoveMeow

답변

2

이 무한 루프를 야기이 코드 (내가 그것을 테스트하지 않았다)하지만 간단한 문제가 잘못된 일을 많이 할 당신은 내부에 있기 때문에 아무 무한 루프가없는이

while (n > 0) 
{ 
    // lots of code which never changes n 
} 

입니다 수 while (n > 0) 루프 n의 값을 수정합니까?

난 당신이

while (n > 0) 
{ 
    // lots of code which never changes n 
    --n; 
} 
+0

고마워요. 확실히 실수였습니다.하지만 웬일인지 내 프로그램은 마치 무한 루프에있는 것처럼 동작합니다. 다시 작성했습니다. – LoveMeow

3

범용 솔루션을 원하는 거라 생각 : 디버거에서 귀하의 응용 프로그램을 실행합니다. 코드에 들어가서 변수의 값을 봅니다. 예상 한 값과 비교하십시오. 코드 편집, 다시 컴파일 및 디버그를 시도하십시오. 문제 지점에 중단 점을 배치하여 코드를 빠르게 건너 뜁니다.

#include "stdafx.h"이 표시되면 Visual Studio를 사용하고있는 것일 수 있습니다.

Mastering Debugging in Visual Studio 2010 - A Beginner's Guide