Cho mảng, thêm 1 phần tử để mảng trở thành cấp số cộng. Trả về phần tử thêm, hoặc -1 nếu không thể.
Input: {1, 3, 5, 7, 11, 13, 15} Output: 9
Giải pháp: Sắp xếp mảng. Tính công sai d. Tìm vị trí sai lệch. Nếu chênh lệch = 2d thì chèn phần tử giữa. Nếu không sai lệch thì thêm cuối.
Chương trình minh họa
#include <bits/stdc++.h>
using namespace std;
int print_number(int arr[], int n){
sort(arr, arr+n);
int d = arr[1] - arr[0];
int numToAdd = -1;
bool numAdded = false;
for (int i = 2; i < n; i++) {
int diff = arr[i] - arr[i-1];
if (diff != d) {
if (numAdded) return -1;
if (diff == 2 * d) {
numToAdd = arr[i] - d;
numAdded = true;
} else return -1;
}
}
if (numToAdd == -1) return (arr[n-1] + d);
return numToAdd;
}
int main(){
int arr[] = {1, 3, 5, 7, 11, 13, 15};
int n = sizeof(arr)/sizeof(arr[0]);
cout << print_number(arr, n);
return 0;
}
Kết quả
9