กำหนดตัวเลขสองตัวเริ่มต้นและสิ้นสุดเป็นตัวแปรช่วงและจำนวนเต็ม q เป็นอินพุต เป้าหมายคือการหาตัวเลขภายในช่วงที่ตัวเลขและผลิตภัณฑ์ที่มี q ไม่มีตัวเลขร่วมกัน
หากตัวเลขคือ 5 และ q คือ 3 ผลคูณจะเป็น 15 ทั้ง 5 และ 15 มีเลข 5 ตัวร่วมกัน
หากตัวเลขคือ 2 และ q คือ 5 ผลคูณจะเป็น 10 ทั้ง 2 และ 10 ไม่มีตัวเลขร่วมกัน
ให้เราเข้าใจด้วยตัวอย่าง
ตัวอย่าง
ป้อนข้อมูล - เริ่มต้น =5 สิ้นสุด =10 q =2
ผลลัพธ์ - การนับจำนวนในช่วงที่ตัวเลขในนั้นและผลิตภัณฑ์ที่มี q ไม่เท่ากันคือ:5
คำอธิบาย - ตัวเลขจะเป็น:
- 5 ( 5 * 2 =10 )
- 6 ( 6 * 2 =12 )
- 7 ( 7 * 2 =14 )
- 8 ( 8 * 2 =16 )
- 9 ( 9 * 2 =18 )
ป้อนข้อมูล - เริ่มต้น =20, สิ้นสุด =25, q =5
ผลลัพธ์ - การนับจำนวนในช่วงที่ตัวเลขในนั้นและผลิตภัณฑ์ที่มี q ไม่เท่ากันคือ:2
คำอธิบาย - ตัวเลขจะเป็น:
- 22 ( 22 * 5 =110 )
- 23 ( 23 * 5 =115 )
แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้
ในแนวทางนี้ เราจะสำรวจตั้งแต่ต้นจนจบและแปลงแต่ละตัวเลขและผลคูณด้วย q เป็นสตริง ตอนนี้สร้างอาร์เรย์ arr[26] ซึ่งจะเก็บจำนวนอักขระของจำนวนปัจจุบัน ตอนนี้สำรวจสตริงของผลิตภัณฑ์ (หมายเลขปัจจุบัน * q) และหากอักขระใด ๆ ของสตริงนั้นมีค่าที่ไม่ใช่ศูนย์ใน arr[] จึงเป็นเรื่องปกติ ให้คืนค่า 0 มิฉะนั้น ให้คืนค่า 1
- ใช้ตัวแปรช่วงและค่า q
- การตรวจสอบฟังก์ชัน (int i, int q) ใช้ตัวเลข i และ q และคืนค่า 1 หากตัวเลข i และ q ไม่เท่ากันหรือไม่เท่ากัน
- แปลง i เป็นสตริงโดยใช้ str =to_string(i)
- แปลงผลิตภัณฑ์ ( temp=q*i ) เป็น sting โดยใช้ str_2 =to_string(temp)
- ใช้อาร์เรย์ความถี่ arr[26] ={ 0 } สำหรับการนับอักขระของ str
- สำรวจ str โดยใช้ for loop และอัปเดตความถี่โดยใช้ arr[str[j] - '0']++
- สำรวจ str_2 โดยใช้ a for loop และตรวจสอบว่า arr[str_2[j] - '0'] ไม่ใช่ศูนย์หรือไม่ ถ้าใช่ แสดงว่าเป็นเรื่องปกติ คืนค่า 0.
- มิฉะนั้นจะส่งคืน 1.
- ฟังก์ชันไม่เท่ากัน (int start, int end, int q) รับตัวแปรช่วงและ q แล้วคืนค่าการนับจำนวนในช่วงเพื่อให้ตัวเลขในนั้นและผลิตภัณฑ์ที่มี q ไม่เท่ากัน
- นับเริ่มต้นเป็น 0
- ข้ามผ่านตัวเลขโดยใช้ for วนซ้ำจาก i-start ถึง i=end
- ใช้เช็ค (i, q) ค้นหาว่าหมายเลข i และผลิตภัณฑ์ที่มี q ไม่มีตัวเลขร่วมกันหรือไม่ ถ้าใช่ ให้นับเพิ่ม
- เมื่อสิ้นสุดการส่งคืน นับเป็นผลลัพธ์
ตัวอย่าง
#include <bits/stdc++.h> using namespace std; int check(int i, int q) { string str = to_string(i); int length = str.size(); int arr[26] = { 0 }; int temp = i * q; string str_2 = to_string(temp); int length_2 = str_2.size(); for (int j = 0; j < length; j++) { arr[str[j] - '0']++; } for (int j = 0; j < length_2; j++) { if (arr[str_2[j] - '0']) { return 0; } } return 1; } int unequal(int start, int end, int q) { int count = 0; for (int i = start; i <= end; i++) { if (check(i, q)) { count++; } } return count; } int main() { int start = 20, end = 40, q = 4; cout << "Count of numbers in range such that digits in it and it's product with q are unequal are: " << unequal(start, end, q); return 0; }
หากเราเรียกใช้โค้ดข้างต้น มันจะสร้างผลลัพธ์ต่อไปนี้ -
ผลลัพธ์
Count of numbers in range such that digits in it and it's product with q are unequal are: 1