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