在 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 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告