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