2014-12-29 2 views
1

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

입력 :

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

어떤 아이디어가 알고리즘에 있으며 문제를 해결하는 방법은 무엇입니까?

+3

** ** 게시물 **을 수정하고 받고있는 결과를 포함하십시오. 이 방법으로 모든 사람이 자신의 프로그램을 실행하여 자신이 무엇인지 알아낼 필요가 없습니다. –

+0

'sort_by_size'는 (사용자 정의 비교기로)'std :: sort'를 사용할 수 있습니다. – Jarod42

+0

@CaptainObvlious 좋습니다. – pesho

답변

1

몇 가지 문제가 있습니다.

먼저 n 변수가 초기화되지 않았습니다. 컴파일러 오류가 발생합니다.

둘째, end() 반복기에서 요소를 역 참조하려고합니다. 시퀀스의 끝 부분을 가리키는 포인터이기 때문에 가능하지 않습니다. 따라서 end()은 역 참조 할 수 없습니다. back()을 사용해야합니다. 다른 단어에서

if(all_dishes.at(i)>*piles.at(j).end()) 

이 될해야합니다 이러한 변경으로

if(all_dishes.at(i) > piles.at(j).back()) 

를 프로그램이 예상 된 결과를 출력합니다.

+0

'.end()'반복자의 역 참조가 문제라는 데 동의합니다; 데이터의 두 x 째 반복에는 새 힙이 아닌 기존 2 다음에 5가 추가되어야합니다. 이것만으로도 영업 사원은 인쇄 작업을 정교하게하여 지구상의 상황을 파악할 수 있습니다. –

+0

고마워요. 나는'begin'과'end'을 더 조심해야하고'front'와'back'을 대신 사용해야합니다. – pesho

관련 문제