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

Tìm số bị lặp và số bị thiếu bằng hai phương trình C++

Mô tả bài toán

Cho mảng kích thước N chứa các số 1..N, một số bị thiếu, một số bị lặp. Tìm cả hai.

Ví dụ

arr = {1,2,2,3,4} → Missing=5, Repeating=2.

Giải thuật (Hai phương trình)

Gọi x = số thiếu, y = số lặp.

  • Tổng mảng: Sarr = SN - x + y → y - x = Sarr - SN (1)
  • Tổng bình phương: Sqarr = SqN - x² + y² → (y-x)(y+x) = Sqarr - SqN (2)

Từ (1),(2): y+x = (Sqarr-SqN)/(Sarr-SN). Giải hệ tìm x,y.

Mã nguồn C++

#include <iostream>
using namespace std;

void findExtraAndMissingVal(int arr[], int n) {
    long long sumN = 1LL*n*(n+1)/2;
    long long sqSumN = 1LL*n*(n+1)*(2*n+1)/6;
    long long arrSum=0, arrSqSum=0;
    for (int i=0; i

Đầu ra

Missing: 5, Repeating: 2