C2100:非法间接

时间:2018-05-14 14:00:11

标签: c++ stl dynamic-programming

我正在尝试解决以下动态编程问题:给定无限量的四分之一(25),角钱(10),镍币(5)和便士(1),编写代码来计算表示n的方式的数量美分。

这是我的代码:

int coins(int n,unordered_map<int,int>& memo){
    if (n < 0){
        return 0;
    }
    else if (n == 1){
        return 1;
    }
    else if (n == 5){
        return 2;
    }

    unordered_map<int, int>::iterator iter = memo.find(n);
    int coinsValue;
    if (iter == memo.end()){
        coinsValue = coins(n - 1,memo) + coins(n - 5,memo) + coins(n - 10,memo) + coins(n - 25,memo);
        memo.insert(n, coinsValue);
    }

    return iter->second;
}

int coins(int n){
    unordered_map<int, int> memo;
    return coins(n, memo);

}


int main(){
    cout << coins(10) << endl;
    return 0;
}

我收到以下错误:

error C2100:illegal indirection

但我无法找到导致问题的原因,代码看起来很干净。

1 个答案:

答案 0 :(得分:0)

你插错了。它应该是:

memo.insert(pair<int,int>(n, coinsValue));

甚至更简单地使用:

memo[n] = coinsValue;

请务必在以下行中返回memo[n],否则您将获得Segmentation fault.