/ / C में टर्नेरी संचालक का उपयोग करके दूसरा सबसे बड़ा नंबर (3/4 संख्याओं का)? - सी, संख्या, टर्नरी-ऑपरेटर

सी में टर्नरी ऑपरेटर का उपयोग करते हुए दूसरा सबसे बड़ा नंबर (3/4 नंबर)? - सी, संख्या, टर्नरी-ऑपरेटर

टर्नरी ऑपरेटरों के लिए ऑनलाइन सभी उदाहरणों में सबसे बड़ी संख्या खोजने की विधि है।

क्या टर्नरी ऑपरेटरों का उपयोग करके 3 या 4 नंबर की दूसरी सबसे बड़ी संख्या को खोजने के लिए एक कोड तैयार करना संभव है?

उत्तर:

जवाब के लिए 0 № 1

आप 3 नंबर का दूसरा सबसे बड़ा भाग प्राप्त कर सकते हैं (a,b तथा c) टर्नरी ऑपरेटर का उपयोग निम्नानुसार है:

int x = (a >= b && a >= c) ? ((b >= c) ? b : c) :
((b >= c) ? ((a >= c) ? a : c) : ((a >= b) ? a : b));

यह विचार करना है कि कौन सा सबसे बड़ा है, फिर अन्य दो में से सबसे बड़ा उठाओ - तीनों में से सबसे बड़ा मूल्य।

ऊपरोक्त में, (a >= b && a >= c) होगा सच अगर सबसे बड़ा (से बड़ा) है b तथा c) ... यदि यह है, तो परिणाम है ((b >= c) ? b : c), जो बड़ा देता है b तथा c.

अगर a था नहीं सबसे बड़ा, हम मूल्यांकन करते हैं ((b >= c) ? ((a >= c) ? a : c) : ((a >= b) ? a : b))। उस में, (b >= c) जाँच करता है कि क्या b तीन में से सबसे बड़ा है (हम पहले से ही जानते हैं a isn "t, इसलिए हम सिर्फ तुलना करते हैं b तथा c)... और अगर b तीन में से सबसे बड़ा है, हम उपयोग करते हैं ((a >= c) ? a : c) का सबसे बड़ा पाने के लिए a तथा c.

यदि नहीं ab सबसे बड़ा है, फिर c होना चाहिए ... इसलिए हम मूल्यांकन करते हैं ((a >= b) ? a : b) का सबसे बड़ा पाने के लिए a तथा b.

एक ही पैटर्न को चार नंबर तक बढ़ाया जा सकता हैतीन के बजाय ... लेकिन यहां तक ​​कि तीन के साथ यह काफी लंबा हो रहा है, और यह संभवतः अधिक सरल विधि के साथ (संभवतः इनलाइन) फ़ंक्शन का उपयोग करने के लिए अधिक समझ में आएगा।


जवाब के लिए 0 № 2

मुझे नहीं लगता कि ternary ऑपरेटरों के साथ दूसरी सबसे बड़ी संख्या प्राप्त करने के लिए एक अत्यधिक चतुर चाल है। लेकिन आप सबसे छोटी संख्या प्राप्त करने के लिए ternary आपरेशन का उपयोग कर सकते हैं:

int min(int a, int b) {
return (a < b)? a : b;
}


int secondLargest(int a, int b, int c) {
return (a < b && a < c)? min(b, c) :
(b < a && b < c)? min(a, c) :
min(a, b);
}

4 संख्याओं के लिए हम पहले से परिभाषित कार्यों का उपयोग कर सकते हैं:

int secondLargest(int a, int b, int c, int d) {
int minVar = (min(a, b), min(c, d))
return a == minVar? secondLargest(b, c, d) :
b == minVar? secondLargest(a, c, d) :
c == minVar? secondLargest(a, b, d) :
secondLargest(a, b, c) :
}

आप इसे मनमाने ढंग से बड़ी संख्या में चर के लिए रख सकते हैं, लेकिन कुछ बिंदु पर यह एक सरणी में उन्हें सॉर्ट करने के लिए अधिक समझ में आता है और फिर अगली-से-अंतिम प्रविष्टि पढ़ता है।