2013-10-06 78 views
-1

我需要給出可能的最小變化量。我輸入了幾個案例,每個案例都有一些硬幣(1個不一定是它們的一部分),我想要的數量的數量然後我輸入不同的硬幣和不同的號碼進行測試。最小變化量C++

我不知道爲什麼我的程序不工作。由於1不一定是變化的一部分,所以我不得不稍微調整程序。

#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需要輸入並執行nothing.I認爲它進入一個無限循環。

+5

「不工作」不是一個好的描述。請說明你的問題。 – Appleshell

+0

詳細說明:程序無法編譯? (如果是這樣,你從編譯器中得到了什麼錯誤?)它會崩潰嗎(如果是這樣,你如何編譯並運行它?)它會編譯並運行,但會產生意外的輸出嗎?如果是這樣,你得到的輸出是什麼 - 你期望得到什麼? – jalf

+0

好吧,它沒有給我任何東西,它運行。但多數民衆贊成it.takes輸入,什麼都不做。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