2012-05-31 6 views
5

내 숙제 문제 :C++ 배열에서 가장 큰 수 찾기

parkingTickets라는 이름의 정수의 배열을 선언하고 올해 초부터 매일 도시 경찰에 의해 주어진 주차 티켓의 수에 초기화 된 . 따라서 배열의 첫 번째 요소에는 1 월 1 일에 제공된 티켓 수가 포함되고 마지막 요소에는 오늘 주어진 티켓 수가 포함됩니다.

ndays라는 변수가 선언되고 초기화되어 정렬. (따라서 오늘이 1 월 18 일이면 18 일, 오늘이 2 월 3 일이면 날이 34 일 것입니다.)

또한 변수 k와 함께 mostTickets라는 변수가 선언되었습니다 .

추가 변수를 사용하지 않고 ndays 또는 parkingTickets 배열의 요소 값을 변경하지 않고 parkingTickets에서 발견되는 가장 큰 값을 포함하는 mostTickets을 생성하는 코드를 작성하십시오. 이를 위해

, 나는 다음과 같은 코드를 가지고 :

for(k = 0; k < ndays; k++) { 
    if (parkingTickets[k] > parkingTickets[ndays]) { 
     mostTickets = parkingTickets[k]; 
    } 
} 

하지만 내 운동 제출자가 잘못 말하고있다. 내 코드에 무슨 문제가 있습니까? parkingTickets[ndays - 1]도 시도했지만 작동하지 않습니다.

+1

코드가 작동하는지 테스트 해 보았습니까? 그것은 내게 옳은 것처럼 보입니다 (언뜻보기) – Jon

+3

'parkingTickets [ndays]'가 아닌 'parkingTickets [k]'와'mostTickets'를 비교하면 안됩니까? 배열이 어떻게 선언되고 귀하의 진술에 따라)? – birryree

+1

죄송합니다. "숙제"태그를 보지 못했으며 직접적인 해결책을 제공했습니다. 내 대답을 삭제했습니다. – mfontanini

답변

9

비교가 잘못되었습니다. 매번 마지막 요소와 현재 요소를 비교하고 있습니다. 현재 요소를 mostTickets과 비교하면됩니다. 즉

if(parkingTickets[k] > mostTickets) 

또한 대책을 위해 mostTickets를 parkingTickets [0]로 초기화하는 것이 좋습니다.

+0

"또한 좋은 측정을 위해 mostTickets를 parkingTickets [0]로 초기화하는 것이 좋습니다." - yes, that 또는 0이고, parkingTickers [0]을 사용하면 for 루프는'k = 1; k

+1

그리고'mostTickets = parkingTickets [0];'을 초기화하면'ndays> 0'을 확인해야합니다 (그렇지 않으면 빈 배열의 끝을지나 읽습니다). – user

+0

0으로 초기화 할 때의 문제는 배열에 모든 음수가 들어 있으면 문제가 발생한다는 것입니다. 올리버도 잘 부탁드립니다. 배열 범위를 벗어나는 배열은 원하지 않습니다. –

11

C++는 std::max_element도 제공합니다. 선생님이 이것을 사용하기를 바랍니다.하지만 표준 라이브러리에 대해 알고있는 것이 좋습니다.

mostTickets = *std::max_element(parking_tickets, parking_tickets + ndays) 
+1

+1 최상의 솔루션은 항상 표준 라이브러리를 잘못 구현하는 것을 그만 두는 것입니다. – ildjarn

+0

+1 와우 !!! 나는 결코 그것을 새롭게하지 않았다! – Rhexis

+0

숙제이기 때문에 std :: max_element()를 사용하는 솔루션이 학년에 제출할 수 없다고 생각합니다. –

1

것은 우리가 처음이 솔루션의 문제는 당신이 mostTickets 변수를 초기화하지 않은 당신은 다른 절을 해달라고이다 솔루션

int parkingTickets[] = {3,6,7,4,8,10,0}; 
int ndays = 7; 
for(k = 0; k < ndays; k++) { 
    if (parkingTickets[k] > parkingTickets[ndays]) { 
    mostTickets = parkingTickets[k]; 
    } 
} 

분석해 보겠습니다. 이 코드가 도움이 될 것입니다.

int parkingTickets[] = {3,6,7,4,8,10,0}; 
int ndays = 7; 
int mostTickets = -1; 
for(int k = 0; k < ndays; k++) { 
    if (parkingTickets[k] > mostTickets) { 
    mostTickets = parkingTickets[k]; 
    } 
} 

이 후에는 가장 큰 숫자의 숫자가 배열에 저장됩니다. 이 솔루션은 O (n)을 사용하여 배열을 반복하고 일부는 비교를 위해 작업을 완료하므로 완료됩니다.

관련 문제