Минимальная сумма изменений Переполнение стека

Мне нужно указать минимально возможное количество возможных изменений. Укажите количество дел, в каждом случае было количество монет (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;
}

РЕДАКТИРОВАТЬ: Под «не работает» я имею в виду, что он на самом деле ничего не делает. Он принимает входные данные и ничего не делает. Я думаю, что это идет в бесконечный цикл.

-1

Решение

Универсальное решение: запустите ваше приложение под отладчиком. Шагните в код, затем посмотрите значения переменных. Сравните со значениями, которые вы ожидаете. Попробуйте отредактировать код, перекомпилировать и снова выполнить отладку. Разместите точки останова в проблемных местах, чтобы быстро перепрыгнуть через код.

я вижу #include "stdafx.h", это, вероятно, означает, что вы используете Visual Studio. Вот руководство:

Освоение отладки в Visual Studio 2010 — Руководство для начинающих

3

Другие решения

С этим кодом может быть что-то не так (я его не тестировал), но есть одна простая проблема, которая может вызвать бесконечный цикл:

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;
}
2

По вопросам рекламы [email protected]