给定两个数字,开始和结束作为范围变量,整数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。
函数check(int i, int q)采用数字i和q,如果i和q的数字不相等或不通用,则返回1。
使用str =将i转换为字符串to_string(i)。
使用str_2 =将乘积(temp = q * i)转换为字符串to_string(temp)。
取频率数组arr [26] = {0}来计算str的字符数。
使用for循环遍历str并使用arr [str [j]-'0'] ++更新频率。
使用for循环遍历str_2并检查arr [str_2 [j]-'0']是否为非零,如果为arr,则返回其公用。返回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