我有一排數字,我想把它放入堆中。它的放置方式是觀察樁(它們應該總是按尺寸排列),如果發現一個樁的數量小於第一個樁的數量,那麼將它放在樁的前面;如果它比堆中的最後一個數字更大,則將它放在堆的後面。如果以上都不是真的,那麼你會創造一個新的樁。例如:把數字放入不同的堆
輸入:
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好的。 – pesho