У меня есть ряд цифр, и я хочу положить его в кучи. То, как это делается, - это посмотреть на сваи (их всегда нужно заказывать по размеру), и если вы найдете кучу, в которой число меньше первого числа в этой куче, которое вы ставите перед кучей; если он больше последнего числа в куче, вы кладете его на заднюю часть кучи. Если ни одно из вышесказанного не верно, вы делаете новую кучу. Например:Поместите числа в разные сваи
Вход:
2 5 4 3 4 5 7 6 5 0 // 0 is used for end of input
Выход:
3 4 5 7
2 5 6
4 5
Программа компилируется и работает, но не так, как надо (разные результаты). Код ниже:
#include <iostream>
#include <deque>
#include <vector>
using namespace std;
void sort_by_size(vector<deque<int>>& container)
{
for(int i=0;i<container.size();i++)
for(int j=i;j<container.size();j++)
if(container.at(i).size()<container.at(j).size())
swap(container.at(i),container.at(j));
}
int main()
{
int n;
vector<int> all_dishes;
while(n!=0)
{
cin>>n;
if(n!=0)
all_dishes.push_back(n);
}
vector<deque<int>> piles ;
for(int i=0;i<all_dishes.size();i++)
{
sort_by_size(piles);
bool smaller = false;
bool greater = false;
for(int j=0;j<piles.size();j++)
{
if(all_dishes.at(i)<*piles.at(j).begin())
{
piles.at(j).push_front(all_dishes.at(i));
smaller = true;
break;
}
if(all_dishes.at(i)>*piles.at(j).end())
{
piles.at(j).push_back(all_dishes.at(i));
greater = true;
break;
}
}
if (smaller==false && greater==false)
{
deque<int> temp;
temp.push_back(all_dishes.at(i));
piles.push_back(temp);
}
/*cout<<i<<":"<<endl;
for(int i=0;i<piles.size();i++)
{
for(int j=0;j<piles.at(i).size();j++)
{
cout<<piles.at(i).at(j)<<" ";
}
cout<<endl;
}*/ //for looking what happens at each iteration
}
for(int i =0;i<piles.size();i++)
{
for(int j=0;j<piles.at(i).size();j++)
{
cout<<piles.at(i).at(j)<<" ";
}
cout<<endl;
}
return 0;
}
Любые идеи, в чем проблема с алгоритмом и как его исправить?
Пожалуйста, ** отредактируйте ** свое сообщение и включите результаты, которые вы получаете. Таким образом, всем не нужно запускать вашу программу, чтобы узнать, что они собой представляют. –
'sort_by_size' может использовать' std :: sort' (с пользовательским компаратором). – Jarod42
@CaptainObvlious OK. – pesho