สมมติว่าเรามีอาร์เรย์ A ที่มี 3 องค์ประกอบ A[1] เป็นค่าเฉลี่ยเลขคณิตของ A[0] และ A[2] ถ้า A[0] + A[2] = 2 * A[1] ความคลาดเคลื่อนค่าเฉลี่ยเลขคณิตของตัวเลขสามตัว d(A[0], A[1], A[2]) คือ |A[0] + A[2] - 2*A[1]| เราสามารถดำเนินการต่อไปนี้ได้ไม่จำกัดจำนวนครั้ง: เลือกดัชนี i และ j จาก {0, 1, 2} ที่ i != j เพิ่ม A[i] ขึ้น 1 และลด A[j] ลง 1 เราต้องหาค่าต่ำสุดของความคลาดเคลื่อนค่าเฉลี่ยเลขคณิต
เช่น ถ้าค่าที่ป้อนเข้าเป็น A = [2, 2, 6] ผลลัพธ์จะได้ 1 เพราะถ้าลด A[0] และเพิ่ม A[1] อาร์เรย์จะกลายเป็น [1, 3, 6] ความคลาดเคลื่อนจะเป็น |1 + 6 - 2 * 3| = 1
ขั้นตอนการแก้ปัญหา
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนดังนี้:
a := A[0] b := A[1] c := A[2] คืนค่า min(1, (((a + c - 2 * b) mod 3 + 3) mod 3))
ตัวอย่างโค้ด
ดูการนำไปใช้จริงด้านล่างเพื่อความเข้าใจที่ดียิ่งขึ้น:
#include <bits/stdc++.h> using namespace std; int solve(vector<int> A) { int a = A[0]; int b = A[1]; int c = A[2]; return min(1, ((a + c - 2 * b) % 3 + 3) % 3); } int main() { vector<int> A = { 2, 2, 6 }; cout << solve(A) << endl; }
ข้อมูลนำเข้า
{ 2, 2, 6 }
ข้อมูลส่งออก
1