在 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
廣告