下面的代码不打印任何东西

时间:2017-06-08 09:07:22

标签: c++

#include <iostream>
#include <iterator>
#include <algorithm>

using namespace std;

int ma(float array[], int N)
{
    int k = 0;
    float max = array[k];
    for (int i = 0; i < N; ++i) {
        if (array[i] > max) {
            max = array[i];
            k = i;
        }
    }
    return k;
}

int main()
{
    int t;
    while (t--) {
        int n;
        cin >> n;
        int w[n], p[n];
        for (int i = 0; i < n; i++)
            cin >> w[i];
        for (int i = 0; i < n; i++)
            cin >> p[i];
        float x[n];
        for (int i = 0; i < n; i++)
            x[i] = p[i] / w[i];
        int weigth = 0, profit = 0;
        while (weigth <= 20) {
            // int k=distance(x, max_element(x, x + n));
            // int k=  std::distance(x, max_element(x, x + sizeof(x)/sizeof(x)));
            int k = ma(x, n);
            weigth = weigth + w[k];
            profit = profit + p[k];
            x[k] = p[k] = w[k] = 0;
        }
        cout << weigth << endl
             << profit << endl;
    }
}

以上代码不打印任何内容。如果您想要问题,请参阅"catch-the-match"

2 个答案:

答案 0 :(得分:2)

你的代码甚至没有编译,

你不能在C ++中做到这一点

int n;
cin >> n;
int w[n], p[n];

因为n在编译时必须是常量,另一方面这样做:

int t;
while (t--) {

在循环中产生不可预测的迭代次数,因为t未初始化

答案 1 :(得分:0)

您必须将int n声明为const int n才能使代码正确编译。