2012-05-31 24 views
5

मेरे होमवर्क समस्या:सी ++ सरणी में सबसे बड़ी संख्या ढूँढना

parkingTickets नामित पूर्णांकों की एक सरणी घोषित किया गया है और पार्किंग टिकट की संख्या चालू वर्ष की शुरुआत के बाद प्रत्येक दिन शहर पुलिस ने आउट दिया करने के लिए प्रारंभ । (इस प्रकार, सरणी के पहले तत्व में 1 जनवरी को दिए गए टिकटों की संख्या शामिल है; अंतिम तत्व में आज दिए गए टिकटों की संख्या शामिल है।)

ndays नामक एक चर घोषित किया गया है और इसका आकार बदलने के लिए प्रारंभ किया गया है सरणी। (इस प्रकार, अगर आज 18 जनवरी थे, तो रविवार के पास मूल्य 18 होगा; अगर आज 3 फरवरी था, तो रविवार के पास मूल्य 34 होगा।)

इसके अतिरिक्त, अधिकांश टिकट नामक एक चर को एक चर के साथ घोषित किया गया है ।

किसी भी अतिरिक्त चर का उपयोग किए बिना, और ndays के मूल्य या पार्किंग टिकट के तत्वों को बदलने के बिना, कुछ कोड लिखें जिसके परिणामस्वरूप अधिकांश टिकटों में पार्किंग टिकटों में सबसे बड़ा मूल्य होता है।

इस के लिए, मैं निम्नलिखित कोड है:

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

लेकिन मेरे व्यायाम सबमिटर कह रहा है यह गलत है। मेरे कोड में क्या गलत है? मैंने parkingTickets[ndays - 1] भी कोशिश की, लेकिन यह या तो काम नहीं करता है।

+1

क्या आपने यह देखने के लिए कोड का परीक्षण किया है कि यह काम कर रहा है या नहीं? यह मेरे लिए सही लगता है (पहली नज़र में) – Jon

+3

क्या आप 'पार्किंग टिकट [ओं]' की बजाय 'पार्किंग टिकट [के]' 'अधिकतम टिकट 'की तुलना नहीं कर रहे हैं (जो या तो एक-अतीत के सरणी का अंत है कैसे सरणी घोषित की जाती है और आपके बयान से जा रही है)? – birryree

+1

क्षमा करें, मुझे "होमवर्क" टैग नहीं मिला और प्रत्यक्ष समाधान प्रदान किया गया। मेरा जवाब हटा दिया गया। – mfontanini

उत्तर

9

आपकी तुलना गलत है। आप वर्तमान तत्व को हर बार अंतिम तत्व से तुलना कर रहे हैं। आपको वर्तमान तत्व की तुलना सबसे अधिक टिकटों की तुलना में करने की आवश्यकता है। अर्थात

if(parkingTickets[k] > mostTickets) 

इसके अलावा, अच्छा उपाय, मैं parkingTickets होने के mostTickets आरंभ की सिफारिश करेंगे [0]।

+0

"इसके अलावा, अच्छी तरह से, मैं पार्किंग टिकट होने के लिए अधिकांश टिकटों को शुरू करने की सलाह दूंगा [0]।" - हाँ, या तो वह या 0, और पार्किंग टिकर्स का उपयोग करते हुए [0] तो लूप को 'k = 1 में बदला जा सकता है; के

+1

और यदि आप 'अधिकांश टिकट = पार्किंग टिकट [0] प्रारंभ करते हैं;', आपको यह सुनिश्चित करने के लिए जांच करनी चाहिए कि 'ndays> 0' (अन्यथा आप खाली सरणी के अंत में पढ़ लेंगे)। – user

+0

इसे 0 से शुरू करने में समस्या, मैंने पाया, यह है कि यदि सरणी में सभी नकारात्मक संख्याएं हैं, तो आप समस्याओं में भाग लेते हैं। ओलिवर द्वारा भी अच्छी कॉल। आप सीमाओं से बाहर एक सरणी नहीं चाहते हैं। –

11

सी ++ std::max_element प्रदान करता है। मुझे संदेह है कि आपका शिक्षक चाहता है कि आप इसका इस्तेमाल करें, लेकिन मानक लाइब्रेरी के बारे में जानना शायद अच्छा है।

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

+1 मानक लाइब्रेरी को खराब रूप से पुन: कार्यान्वित करने की कोशिश करना बंद करना हमेशा सबसे अच्छा समाधान है। – ildjarn

+0

+1 वाह !!! मैंने कभी नया नहीं किया! – Rhexis

+0

चूंकि यह होमवर्क है, मुझे संदेह है कि std :: max_element() का उपयोग करने वाला समाधान ग्रेड के लिए चालू करने के लिए स्वीकार्य नहीं होगा। –

1

पहले हम अपने समाधान

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

का विश्लेषण इस समाधान के साथ समस्या यह है कि आप mostTickets चर प्रारंभ नहीं किया गया है और आप न एक और को खंड है करते हैं। यह कोड आपके लिए काम करेगा।

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

इस mostTickets बाद सरणी में सबसे बड़ी संख्या के मान का आयोजन करेगा। यह समाधान ओ (एन) को पूरा करने में लगेगा क्योंकि हम सरणी के माध्यम से लूपिंग कर रहे हैं और तुलना के लिए कुछ काम करते हैं।

संबंधित मुद्दे