กำหนดตัวเลขสองตัว start และ end เป็นตัวแปรช่วงและจำนวนเต็ม q เป็นอินพุต เป้าหมายคือหาตัวเลขภายในช่วงที่ตัวเลขและผลคูณกับ q ไม่มีหลักร่วมกัน
ถ้าตัวเลขคือ 5 และ q คือ 3 ผลคูณจะเป็น 15 ทั้ง 5 และ 15 มีหลักร่วมกันคือ 5
ถ้าตัวเลขคือ 2 และ q คือ 5 ผลคูณจะเป็น 10 ทั้ง 2 และ 10 ไม่มีหลักร่วมกัน
ทำความเข้าใจด้วยตัวอย่าง
ตัวอย่าง
Input - start = 5, end = 10, q = 2
Output - จำนวนตัวเลขในช่วงที่หลักของมันและผลคูณกับ q ไม่มีหลักซ้ำกันคือ: 5
คำอธิบาย - ตัวเลขจะเป็น:
- 5 (5 * 2 = 10)
- 6 (6 * 2 = 12)
- 7 (7 * 2 = 14)
- 8 (8 * 2 = 16)
- 9 (9 * 2 = 18)
Input - start = 20, end = 25, q = 5
Output - จำนวนตัวเลขในช่วงที่หลักของมันและผลคูณกับ q ไม่มีหลักซ้ำกันคือ: 2
คำอธิบาย - ตัวเลขจะเป็น:
- 22 (22 * 5 = 110)
- 23 (23 * 5 = 115)
แนวทางที่ใช้ในโปรแกรมด้านล่าง
ในแนวทางนี้ เราจะเดินทางจาก start ถึง end และแปลงแต่ละตัวเลขและผลคูณกับ q เป็นสตริง ตอนนี้สร้างอาร์เรย์ arr[26] ที่จะเก็บจำนวนตัวอักษรของตัวเลขปัจจุบัน ตอนนี้เดินทางผ่านสตริงของผลคูณ (ตัวเลขปัจจุบัน * q) และถ้าตัวอักษรใดของสตริงนั้นมีค่าไม่เป็นศูนย์ใน arr[] แล้วมันเป็นหลักร่วมกัน คืนค่า 0 มิฉะนั้นคืนค่า 1
- รับตัวแปรช่วงและค่า q
- ฟังก์ชัน check(int i, int q) รับตัวเลข i และ q และคืนค่า 1 ถ้าหลักของ i และ q ไม่ซ้ำกัน
- แปลง i เป็นสตริงด้วย str = to_string(i)
- แปลงผลคูณ (temp = q*i) เป็นสตริงด้วย str_2 = to_string(temp)
- รับอาร์เรย์ความถี่ arr[26] = { 0 } สำหรับนับตัวอักษรของ str
- เดินทางผ่าน str ด้วย for loop และอัปเดตความถี่ด้วย arr[str[j] - '0']++
- เดินทางผ่าน str_2 ด้วย for loop และตรวจสอบถ้า arr[str_2[j] - '0'] ไม่เป็นศูนย์ ถ้าใช่เป็นหลักร่วมกัน คืนค่า 0
- มิฉะนั้นคืนค่า 1
- ฟังก์ชัน unequal(int start, int end, int q) รับตัวแปรช่วงและ q และคืนค่าจำนวนตัวเลขในช่วงที่หลักของมันและผลคูณกับ q ไม่มีหลักซ้ำกัน
- รับ count เริ่มต้นเป็น 0
- เดินทางผ่านตัวเลขด้วย for loop จาก i = start ถึง i = end
- ใช้ check(i, q) หาว่าตัวเลข i และผลคูณกับ q ไม่มีหลักร่วมกัน ถ้าใช่เพิ่ม count
- ในที่สุดคืนค่า count เป็นผลลัพธ์
ตัวอย่าง
#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