Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Tìm phần tử chẵn và lẻ thiếu từ các mảng cho trước trong C++


Đề bài

Cho hai mảng số nguyên even[] và odd[] lần lượt chứa các phần tử chẵn và lẻ liên tiếp, mỗi mảng thiếu một phần tử. Nhiệm vụ là tìm các phần tử thiếu đó.

Ví dụ

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.

Thuật toán

  • Lưu phần tử chẵn nhỏ nhất và lớn nhất từ mảng even[] vào biến minEven và maxEven
  • Tổng N số chẵn đầu tiên là N * (N + 1). Tính tổng số chẵn từ 2 đến minEven là sum1 và tổng từ 2 đến maxEven là sum2
  • Tổng cần thiết của mảng chẵn sẽ là reqSum = sum2 – sum1 + minEven, trừ tổng mảng even[] từ reqSum sẽ cho số chẵn thiếu
  • Tương tự, số lẻ thiếu cũng tìm được vì tổng N số lẻ đầu tiên là N²

Ví dụ mã nguồn

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

Khi biên dịch và chạy chương trình trên. Nó tạo ra đầu ra sau:

Kết quả

Missing even number = 14 Missing odd number = 5