c++ - C++ 中的唯一数字

标签 c++ performance algorithm math

<分区>

我试图有效地列出 1 到 100 之间的数字。但是我必须去掉具有相同数字的数字。
例子: 根据此规则,12 与 21 相同 13 等于 31 14 等于 41 所以 for 循环不会遍历相同的数字。
我在想一些技巧,例如获取从 1 到 100 的所有数字,然后删除找到的当前数字排列。 我问这个的原因是因为在 100000 这样的大范围内它会失败。 另一个例子:124等于142,241,214,412,421

最佳答案

您可以应用递归。这个函数的原型(prototype)是这样的:

print_digits(int num_of_remaining_digits,int start_from_digit, int current_number);

编辑:为了完成,我在这里展示我的解决方案(我认为它比 Ben Voigt 和升序输出顺序具有更好的可读性

void print_digits(int num_of_remaining_digits,int start_from_digit, int current_number)
{
  if(num_of_remaining_digits == 0) 
  {
    std::cout << current_number << std::endl;
    return;
  }

  for(int i=start_from_digit;i<=9;i++)
  {
     print_digits(num_of_remaining_digits-1,i,10*current_number+i);
  }
}

这是测试代码

http://ideone.com/Xm8Mv

这是如何运作的?

它是递归中的经典之一。首先是停止条件。然后是主循环。
主循环从 start_from_digit 开始,因为所有生成的数字都将按非递减顺序排列。例如,如果 current_number15,它将调用 print_digits whith

print_digits(num_of_remaining_digits-1,5,155)
print_digits(num_of_remaining_digits-1,6,156)
print_digits(num_of_remaining_digits-1,7,157)
print_digits(num_of_remaining_digits-1,8,158)
print_digits(num_of_remaining_digits-1,9,159)

在每次调用中,它都会检查我们是否到达了 num_of_remaining_digits 的结尾,如果没有,它将使用 current_number 从被推送为 start_from_digit(第二个参数)的数字继续

关于c++ - C++ 中的唯一数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9056633/

相关文章:

algorithm - 如果记忆化是自上而下的深度优先,而 DP 是自下而上的广度优先,那么自上而下的广度优先/自下而上的深度优先等价物是什么?

c++ - MS Detours - DetourAttach 失败

java - 如何在Java中制作这种自定义算法?

java - 如何在一个循环中重新组合这些 if 条件?

performance - "data URLs"是提高网站图标加载速度的好方法吗?

sql - 在 SQL 中,使用 DISTINCT 如何影响性能?

c# - 分析 .net 多线程应用程序 (Visual Studio 2008)

c++ - 我应该使用哪个 bitset 实现来获得最佳性能?

c++ - 在运行之间保存 RocksDB 存储的值

c++ - 使用仿函数作为谓词的 C++ STL 程序