簡體   English   中英

Function 不返回值,而在 c++ 中使用向量

[英]Function does not return a value, while using a vector in c++

下面的 function 在使用 integer 數組 (minNumCoins) 時工作正常,但在使用向量而不是數組時不返回任何內容。 誰能告訴我為什么?

int dp_change(const vector<int> &coins, int money, int n){
    //vector<int> minNumCoins(n);
    int minNumCoins[n];
    
    int numCoins = 0;
    minNumCoins[0] = 0;
    
    for( int m = 1; m <= money; m++){
        minNumCoins[m] = 100000;
        
        for(int i = 0; i < coins.size(); i++){
            if(m >= coins[i]){
                numCoins = minNumCoins[m - coins[i]] + 1;
                if(numCoins < minNumCoins[m]){
                    minNumCoins[m] = numCoins;
                }
            }
        }
        
    }
    
    //return minNumCoins.at(money);
    return minNumCoins[money];
}

主 function

int main() {
    int n, money;
    cin >> money;
    cin >> n;

    vector<int> coins(n);

    for(int i = 0; i < n; i++){
        cin >> coins[i];
    }

    //int num_of_coins = dp_change(coins, money);

    cout << "Number of coins = " << dp_change(coins, money, n);

    return 0;
    
}

樣本

Input:
> 20 <br>
2 <br>
10 <br>
1

Output:

Number of coins = 2

在這段代碼中:

   for( int m =1 ; m<=money; m++){
        minNumCoins[m] = 100000;

如果money >= nm可能會超出范圍,它在您的示例輸入中( money =20, n =2)。 結果,您的程序在到達 output 之前就崩潰了。

int dp_change(const vector<int> &coins, int money, int n){
    vector<int> minNumCoins(n);
    //int minNumCoins[n];
    
    int numCoins = 0;
    minNumCoins[0] = 0;
    
    for( int m =1 ; m<n; m++){
        minNumCoins[m] = 100000;
        
        for(int i=0; i< coins.size(); i++){
            if( m >= coins[i]){
                numCoins = minNumCoins[m-coins[i]] +1;
                if( numCoins < minNumCoins[m]){
                    minNumCoins[m] = numCoins;
                }
            }
        }
        
    }
    
    //return minNumCoins.at(money);
    return minNumCoins[any value which is less then n (0-(n-1))];
}

讓我知道我的建議是否有效。 使用 vector 時有些事情可能會導致錯誤。

您正在檢查外循環.. for( int m =1; m<=money; m++){這里我認為m<n將是循環工作的正確條件。 如果money大於n ,則會發生越界錯誤,從而導致代碼崩潰。 如果money = 10 , n = 4 ,則會出現數組越界錯誤。

加上回報將是這樣的。 return minNumCoins[n];

或者您可以聲明大小minNumCoins[money]minNumCoins數組

現在正確地實現你的邏輯,希望你會得到想要的結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM