-1

可能な限り最小限の変更量を与える必要があります。ケースの数を入力します。各ケースには、コインの数 (1 は必ずしもそれらの一部であるとは限りません) と、テストしたい数の数が含まれていました。次に、さまざまなコインを入力します。テストする別の数。

私のプログラムが動かない理由がわかりません。 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;
}

編集:「機能しない」とは、実際には何もしないことを意味します。入力を受け取り、何もしません。無限ループに入ると思います。

4

2 に答える 2

3

ユニバーサル ソリューション: アプリをデバッガーで実行します。コードにステップ インし、変数の値を監視します。期待する値と比較します。コードを編集し、再コンパイルして、もう一度デバッグしてみてください。問題のある場所にブレークポイントを配置して、コードをすばやくジャンプします。

なるほど#include "stdafx.h"、それはおそらく Visual Studio を使用していることを意味します。ここにガイドがあります:

Visual Studio 2010 でのデバッグの習得 - 初心者向けガイド

于 2013-10-06T15:31:03.760 に答える
2

このコードには多くの問題がある可能性があります (私はテストしていません) が、無限ループを引き起こす単純な問題の 1 つがこれです。

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;
}
于 2013-10-06T15:26:08.653 に答える