ในบทช่วยสอนนี้ เราจะเขียนโปรแกรมที่ค้นหาตัวเลขโดยที่โมดูลัสขององค์ประกอบแต่ละอาร์เรย์จะเหมือนกัน มาดูตัวอย่างกัน
ป้อนข้อมูล − arr ={10, 4, 2}
ผลผลิต − 1 2
หากมีตัวเลขสองตัว x, y และ x> y , สมมติว่า x - y =d.
จากนั้น x =y + d .
สมมติว่าเรามีตัวเลข k โดยที่ x%k =y%k ใช้โมดูลัส k สำหรับสมการข้างต้นแล้วหาค่า d .
x%k = (y+d)%k y%k = y%k +d%k d%k = 0
จากการคำนวณข้างต้น ถ้าตัวเลข k เป็นตัวหารความแตกต่างระหว่าง x และ ย . จากนั้นจะเป็นตัวหารของตัวเลข x และ ย .
ลองใช้แนวคิดเดียวกันกับอาร์เรย์ขององค์ประกอบ และหาค่า k ดูขั้นตอนการแก้ปัญหา
-
เริ่มต้นอาร์เรย์ด้วยตัวเลข
-
ที่นี่ d จะเป็นความแตกต่างระหว่างค่าสูงสุดและต่ำสุดขององค์ประกอบอาร์เรย์
-
จัดเรียงค่าของอาร์เรย์โดยใช้วิธีการจัดเรียง
-
ค้นหาความแตกต่างระหว่างตัวเลขสุดท้ายและตัวแรก
-
หากผลต่างเป็นศูนย์ แสดงว่าตัวเลขทั้งหมดเหมือนกัน จากนั้นผลลัพธ์ของโมดูลที่มีตัวเลขใด ๆ จะให้ผลลัพธ์เหมือนกัน
-
หาตัวหารของจำนวน d . และเก็บเอาไว้
-
วนซ้ำตัวหารทั้งหมดและค้นหาจำนวนที่มีโมดูโลที่มีองค์ประกอบอาร์เรย์เหมือนกัน
ตัวอย่าง
มาดูโค้ดกันเลย
#include <bits/stdc++.h> using namespace std; void findNumbers(int arr[], int n) { sort(arr, arr + n); int d = arr[n - 1] - arr[0]; // check whether all elements are same or not if (d == 0) { cout << "Infinite number of k's"; return; } // finding the divisors of d vector <int> v; for (int i = 1; i * i <= d; i++) { if (d % i == 0) { v.push_back(i); if (i != d / i) { v.push_back(d / i); } } } // findind the k's for (int i = 0; i < v.size(); i++) { int temp = arr[0] % v[i]; int j; for (j = 1; j < n; j++) { if (arr[j] % v[i] != temp) { break; } } if (j == n) cout << v[i] << " "; } cout << endl; } int main() { int arr[] = {10, 4, 2}; findNumbers(arr, 3); return 0; }
ผลลัพธ์
หากคุณเรียกใช้โค้ดด้านบน คุณจะได้ผลลัพธ์ดังต่อไปนี้
1 2
บทสรุป
หากคุณมีข้อสงสัยใดๆ ในบทแนะนำ โปรดระบุในส่วนความคิดเห็น