समस्या कथन
दो पूर्णांक सरणियों को भी [] और विषम [] दिया गया है जिसमें क्रमशः सम और विषम तत्व होते हैं, जिनमें से प्रत्येक सरणी से एक तत्व गायब होता है। कार्य लापता तत्वों को ढूंढना है।
उदाहरण
If even[] = {10, 8, 6, 16, 12} and
odd[] = {3, 9, 13, 7, 11} then
missing number from even array is 14 and from odd array is 5. एल्गोरिदम
- सम [] सरणी से न्यूनतम और अधिकतम सम तत्वों को minEven और maxEven में संग्रहीत करें
- पहली N सम संख्याओं का योग N * (N + 1) है। 2 से लेकर न्यूनतम तक सम संख्याओं के योग की गणना करें, यहां तक कि योग 1 और सम संख्याओं का योग 2 से अधिकतम तक सम संख्याओं का योग सम2 भी कहें
- सम सरणी का आवश्यक योग होगा reqSum =sum2 - sum1 + minEven, इस reqSum से सम [] सरणी योग घटाना हमें लापता सम संख्या देगा
- इसी प्रकार, लुप्त विषम संख्या भी ज्ञात की जा सकती है क्योंकि हम जानते हैं कि पहली N विषम संख्याओं का योग N2 है
उदाहरण
#include <bits/stdc++.h>
using namespace std;
void findMissingNums(int even[], int sizeEven, int odd[], int sizeOdd) {
int minEven = INT_MAX;
int maxEven = INT_MIN;
int minOdd = INT_MAX;
int maxOdd = INT_MIN;
int sumEvenArr = 0, sumOddArr = 0;
for (int i = 0; i < sizeEven; i++) {
minEven = min(minEven, even[i]);
maxEven = max(maxEven, even[i]);
sumEvenArr += even[i];
}
for (int i = 0; i < sizeOdd; i++) {
minOdd = min(minOdd, odd[i]);
maxOdd = max(maxOdd, odd[i]);
sumOddArr += odd[i];
}
int totalTerms = 0, reqSum = 0;
totalTerms = minEven / 2;
int evenSumMin = totalTerms * (totalTerms + 1);
totalTerms = maxEven / 2;
int evenSumMax = totalTerms * (totalTerms + 1);
reqSum = evenSumMax - evenSumMin + minEven;
cout << "Missing even number = " << reqSum - sumEvenArr << "\n";
totalTerms = (minOdd / 2) + 1;
int oddSumMin = totalTerms * totalTerms;
totalTerms = (maxOdd / 2) + 1;
int oddSumMax = totalTerms * totalTerms;
reqSum = oddSumMax - oddSumMin + minOdd;
cout << "Missing odd number = " << reqSum - sumOddArr << "\n";
}
int main() {
int even[] = {10, 8, 6, 16, 12};
int sizeEven = sizeof(even) / sizeof(even[0]);
int odd[] = {3, 9, 13, 7, 11};
int sizeOdd = sizeof(odd) / sizeof(odd[0]);
findMissingNums(even, sizeEven, odd, sizeOdd);
return 0;
} जब आप उपरोक्त प्रोग्राम को संकलित और निष्पादित करते हैं। यह निम्नलिखित आउटपुट उत्पन्न करता है -
आउटपुट
Missing even number = 14 Missing odd number = 5