在 C++ 中統計範圍內數字的數量,使得數字及其與 q 的乘積中沒有相同的數字


給定兩個數字 start 和 end 作為範圍變數,以及一個整數 q 作為輸入。目標是在一個範圍內找到這樣的數字,使得該數字及其與 q 的乘積沒有共同的數字。

如果數字是 5 且 q 是 3,則乘積將是 15。5 和 15 都有一個共同的數字 5。

如果數字是 2 且 q 是 5,則乘積將是 10。2 和 10 沒有共同的數字。

讓我們透過示例來理解。

例如

輸入 - start = 5, end = 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 )

輸入 - start = 20, end = 25, q = 5

輸出 - 範圍內數字的數量,使得數字及其與 q 的乘積沒有相同的數字為:2

解釋 - 數字將是

  • 22 ( 22 * 5 = 110 ) 
  • 23 ( 23 * 5 = 115 )

下面程式中使用的演算法如下

在這種方法中,我們將從 start 遍歷到 end,並將每個數字及其與 q 的乘積轉換為字串。現在建立一個數組 arr[26],它將儲存當前數字字元的計數。現在遍歷乘積的字串 (current number * q),如果該字串的任何字元在 arr[] 中的值不為零,則它是公共的,因此返回 0。否則返回 1。

  • 獲取範圍變數和一個值 q。
  • 函式 check(int i, int q) 獲取一個數字 i 和 q,如果 i 和 q 的數字不相等或沒有共同的數字,則返回 1。
  • 使用 str = to_string(i) 將 i 轉換為字串。
  • 使用 str_2 = to_string(temp) 將乘積 ( temp=q*i ) 轉換為字串。
  • 為 str 字元的計數獲取頻率陣列 arr[26] = { 0 }。
  • 使用 for 迴圈遍歷 str 並使用 arr[str[j] - '0']++ 更新頻率。
  • 使用 for 迴圈遍歷 str_2 並檢查是否有任何 arr[str_2[j] - '0'] 不為零,如果是,則它是公共的。返回 0。
  • 否則返回 1。
  • 函式 unequal(int start, int end, int q) 獲取範圍變數和 q,並返回範圍內數字的數量,使得數字及其與 q 的乘積沒有相同的數字。
  • 將初始計數設定為 0。
  • 使用 for 迴圈從 i-start 遍歷到 i=end 的數字。
  • 使用 check(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

更新於: 2021年1月29日

145 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告