2017-12-05 24 views
-2

프로그래밍을 향상시키고 내가 가지고있는 수업에서 어떤 내용을 배우고 다시 배우기 위해 Cplusplus.com 웹 사이트의 연습 문제를 진행 중입니다. 올해에 찍은 그리고 아래의 문제는 제가 일하고 특히 마지막 굵은 부분입니다.정수 배열을 비교하여 C++에서 가장 큰 것부터 가장 작은 것으로 표시하는 방법

는 데이터가 프로그램이 있어야합니다 입력되면 (10) 다른 사람 (사람 1, 사람 2, ..., 사람 10) 으로 아침 식사를 먹는 팬케이크의 번호를 입력하도록 요청하는 프로그램을 작성 데이터를 분석하고 누가 가장 많은 팬케이크를 아침 식사로 먹었는지 출력하십시오. 이 예와 같은 모든 10 명 먹은 팬케이크들을 출력되도록

인 4 .. 프로그램을 수정 10 팬케이크 먹었다

인 3 : 7 팬케이크 먹었다

사람 8 : 4 팬케이크

먹었다 여기

내가 가진 무엇

등 ... 지금까지

#include <iostream> 

using namespace std; 

void getPancakesEaten(int pancakes[]); 
void comparePancakesEaten(int pancakes[]); 
void displayOrder(int pancakes[]); 


/********************************************************************** 
* Gets the amount of Pancakes eaten 
***********************************************************************/ 
void getPancakesEaten(int pancakes[]) 
{ 

    for(int i = 0; i < 10; i++) 
    { 
     cout << "Person " << i + 1 << ": ate "; 
     cin >> pancakes[i]; 
    } 

    cout << endl; 
} 

/********************************************************************** 
* Compares the amount of pancakes eaten with each person 
***********************************************************************/ 
void comparePancakesEaten(int pancakes[]) 
{ 
    if(pancakes[0] > pancakes[1] && pancakes[0] > pancakes[2] && pancakes[0] >    pancakes[3] && pancakes[0] > pancakes[4] && pancakes[0] > pancakes[5] && pancakes[0] > pancakes[6] && pancakes[0] > pancakes[7] && pancakes[0] > pancakes[8] && pancakes[9]) 
{ 
    cout << "Person 1 ate " << pancakes[0] << " pancakes" << endl; 
} 

else if(pancakes[1] > pancakes[0] && pancakes[1] > pancakes[2] && pancakes[1] > pancakes[3] && pancakes[1] > pancakes[4] && pancakes[1] > pancakes[5] && pancakes[1] > pancakes[6] && pancakes[1] > pancakes[7] && pancakes[1] > pancakes[8] && pancakes[1] > pancakes[9]) 
{ 
    cout << "Person 2 ate " << pancakes[1] << " pancakes" << endl; 
} 

else if(pancakes[2] > pancakes[0] && pancakes[2] > pancakes[1] && pancakes[2] > pancakes[3] && pancakes[2] > pancakes[4] && pancakes[2] > pancakes[5] && pancakes[2] > pancakes[6] && pancakes[2] > pancakes[7] && pancakes[2] > pancakes[8] && pancakes[2] > pancakes[9]) 
{ 
    cout << "Person 3 ate " << pancakes[2] << " pancakes" << endl; 
} 

else if(pancakes[3] > pancakes[0] && pancakes[3] > pancakes[2] && pancakes[3] > pancakes[1] && pancakes[3] > pancakes[4] && pancakes[3] > pancakes[5] && pancakes[3] > pancakes[6] && pancakes[3] > pancakes[7] && pancakes[3] > pancakes[8] && pancakes[3] > pancakes[9]) 
{ 
    cout << "Person 4 ate " << pancakes[3] << " pancakes" << endl; 
} 

else if(pancakes[4] > pancakes[0] && pancakes[4] > pancakes[2] && pancakes[4] > pancakes[3] && pancakes[4] > pancakes[1] && pancakes[4] > pancakes[5] && pancakes[4] > pancakes[6] && pancakes[4] > pancakes[7] && pancakes[4] > pancakes[8] && pancakes[4] > pancakes[9]) 
{ 
    cout << "Person 5 ate " << pancakes[4] << " pancakes" << endl; 
} 

else if(pancakes[5] > pancakes[0] && pancakes[5] > pancakes[2] && pancakes[5] > pancakes[3] && pancakes[5] > pancakes[4] && pancakes[5] > pancakes[1] && pancakes[5] > pancakes[6] && pancakes[5] > pancakes[7] && pancakes[5] > pancakes[8] && pancakes[5] > pancakes[9]) 
{ 
    cout << "Person 6 ate " << pancakes[5] << " pancakes" << endl; 
} 

else if(pancakes[6] > pancakes[0] && pancakes[6] > pancakes[2] && pancakes[6] > pancakes[3] && pancakes[6] > pancakes[4] && pancakes[6] > pancakes[5] && pancakes[6] > pancakes[1] && pancakes[6] > pancakes[7] && pancakes[6] > pancakes[8] && pancakes[6] > pancakes[9]) 
{ 
    cout << "Person 7 ate " << pancakes[6] << " pancakes" << endl; 
} 

else if(pancakes[7] > pancakes[0] && pancakes[7] > pancakes[2] && pancakes[7] > pancakes[3] && pancakes[7] > pancakes[4] && pancakes[7] > pancakes[5] && pancakes[7] > pancakes[6] && pancakes[7] > pancakes[1] && pancakes[7] > pancakes[8] && pancakes[7] > pancakes[9]) 
{ 
    cout << "Person 8 ate " << pancakes[7] << " pancakes" << endl; 
} 

else if(pancakes[8] > pancakes[0] && pancakes[8] > pancakes[2] && pancakes[8] > pancakes[3] && pancakes[8] > pancakes[4] && pancakes[8] > pancakes[5] && pancakes[8] > pancakes[6] && pancakes[8] > pancakes[7] && pancakes[8] > pancakes[1] && pancakes[8] > pancakes[9]) 
{ 
    cout << "Person 9 ate " << pancakes[8] << " pancakes" << endl; 
} 

else if(pancakes[9] > pancakes[0] && pancakes[9] > pancakes[2] && pancakes[9] > pancakes[3] && pancakes[9] > pancakes[4] && pancakes[9] > pancakes[5] && pancakes[9] > pancakes[6] && pancakes[9] > pancakes[7] && pancakes[9] > pancakes[8] && pancakes[9] > pancakes[1]) 
{ 
    cout << "Person 10 ate " << pancakes[9] << " pancakes" << endl; 
} 

cout << "\n"; 
} 

/********************************************************************** 
* Displays the order in which person ate the most pancakes to the least 
***********************************************************************/ 
void displayOrder(int pancakes[]) 
{ 
    for(int i = 9; i >= 0; i--) 
    { 
     for(int j = 0; j < 9; j++) 
     { 
      if(pancakes[j] > pancakes[j + 1]) 
      { 
       int temp = pancakes[j + 1]; 

       pancakes[j + 1]= pancakes[j]; 

       pancakes[j]=temp; 
      } 
     } 

    cout << "Person " << i + 1 << ": ate " << pancakes[i] << " pancake(s)" << endl; 

    } 

} 

/********************************************************************** 
* Runs the Entire Program 
***********************************************************************/ 
int main() 
{ 
    int pancakes[256]; 
    getPancakesEaten(pancakes); 
    comparePancakesEaten(pancakes); 
    displayOrder(pancakes); 
} 

나는에 실행 한 문제는 그 나는 올바른 순서에게 팬케이크의 번호와 관련된 사람을 표시 할 때 예를 들어 입력에 따라 때로는 올바르지 않습니다.

 
Person 1: ate 12 
Person 2: ate 22 
Person 3: ate 3 
Person 4: ate 4 
Person 5: ate 5 
Person 6: ate 6 
Person 7: ate 7 
Person 8: ate 8 
Person 9: ate 9 
Person 10: ate 10 
Person 2 ate 22 pancakes 
Person 10: ate 22 pancake(s) 
Person 9: ate 12 pancake(s) 
Person 8: ate 10 pancake(s) 
Person 7: ate 9 pancake(s) 
Person 6: ate 8 pancake(s) 
Person 5: ate 7 pancake(s) 
Person 4: ate 6 pancake(s) 
Person 3: ate 5 pancake(s) 
Person 2: ate 4 pancake(s) 
Person 1: ate 3 pancake(s) 

대신 "사람 2"에 입력 한 값이 "사람 10"에 표시되지 않는 이유는 무엇입니까? 내 displayOrder 기능에 대한 내 for 루프 때문입니까?

+1

_ "어디 내 코드에서 내가 잘못 갈거야?"_ [즉, 디버거가 작정하고있는 무슨이다] (http://idownvotedbecau.se/nodebugging/)! – user0042

+0

도움말 디버깅을 요청하는 것은 주제가 아닙니다 - 그러나 이것은 https://ericlippert.com/2014/03/05/how-to-debug-small-programs/ – UKMonkey

답변

0

배열을 정렬 한 다음 표시해야합니다. 더이 대신 같은 것을보십시오 :

#include <iostream> 
#include <algorithm> 

using namespace std; 

void getPancakesEaten(int pancakes[10]); 
void displayOrder(int pancakes[10]); 


/********************************************************************** 
* Gets the amount of Pancakes eaten 
***********************************************************************/ 
void getPancakesEaten(int pancakes[10]) 
{ 
    for(int i = 0; i < 10; i++) 
    { 
     cout << "Person " << i + 1 << ": ate "; 
     cin >> pancakes[i]; 
    } 

    cout << endl; 
} 

/********************************************************************** 
* Displays the order in which person ate the most pancakes to the least 
***********************************************************************/ 
void displayOrder(int pancakes[10]) 
{ 
    int order[10]; 
    for (int i = 0; i < 10; ++i) 
     order[i] = i; 

    sort(order, order+10, [&pancakes](int a, int b){ return pancakes[a] > pancakes[b]; }); 

    for(int i = 0; i < 10; ++i) 
     cout << "Person " << order[i] + 1 << ": ate " << pancakes[order[i]] << " pancake(s)" << endl; 
} 

/********************************************************************** 
* Runs the Entire Program 
***********************************************************************/ 
int main() 
{ 
    int pancakes[10]; 
    getPancakesEaten(pancakes); 
    displayOrder(pancakes); 
} 

Live demo

+0

일 수 있습니다. displayOrder 함수의 for 루프 모두에서 +++ 대신 +++ 전에 아이템을 반복 한 이유는 무엇입니까? –

+0

'++ i'와'i ++' 둘 다'i'를 증가 시키지만,'++ i'는 처음으로 증가분을 수행 한 다음 그 결과를 반환하기 때문에 약간 더 효율적입니다. 반면에'i ++'는 증가가 끝나면 이전 값을 반환합니다. 공연. 이와 같은 루프에서는 실제로는 아무런 문제가 없지만 사용하지 않는 오버 헤드를 피하기 위해'i ++'대신'++ i '를 사용하는 편이 좋다. –

+0

할 때 정렬 기능이 C++에 내장되어 있는가? # 포함 ? –