Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

นับตัวเลขในช่วงที่หลักของมันและผลคูณกับ q ไม่มีหลักซ้ำกันใน C++

กำหนดตัวเลขสองตัว 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