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

นับตัวเลขในช่วงที่ตัวเลขในนั้นและผลิตภัณฑ์ที่มี q ไม่เท่ากันใน C++


กำหนดตัวเลขสองตัวเริ่มต้นและสิ้นสุดเป็นตัวแปรช่วงและจำนวนเต็ม 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