计算范围内的数字,以使其中的数字及其乘以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。
函数check(inti,intq)采用数字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(intstart,intend,intq)接受范围变量和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