숫자가 하나 있는데, 더미에 넣고 싶습니다. 그것이 놓이는 방법은 당신이 더미를 본다 (그들은 항상 크기에 의해 주문되어야한다). 그리고 만일 당신이 그 더미의 첫번째 수보다 작은 수의 더미를 발견한다면 당신은 더미 앞에 놓는다. 더미의 마지막 숫자보다 크면 파일의 뒤쪽에 넣습니다. 위의 어느 것도 사실이 아니라면 새로운 더미를 만듭니다. 예를 들면 :숫자를 다른 더미에 넣으십시오.
입력 :
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