C++程序:统计1到n范围内普通数的个数


假设我们有一个数字n。一个数字是一个正整数n,如果在十进制表示法中所有数字都相同,则称该数字为普通数。我们必须计算1到n范围内普通数的个数。

问题类别

编程中的各种问题可以通过不同的技术来解决。为了解决一个问题,我们首先必须设计一个算法,为此我们必须详细研究特定问题。如果同一个问题反复出现,则可以使用递归方法;或者,我们也可以使用迭代结构。if-else和switch case等控制语句可用于控制程序中逻辑的流程。有效地使用变量和数据结构可以提供更简单的解决方案以及轻量级、低内存占用程序。我们必须查看现有的编程技术,例如分治法、贪心算法、动态规划,并找出它们是否可以。这个问题我们可以通过一些基本的逻辑或暴力方法来解决。请参阅以下内容以更好地理解方法。

因此,如果我们问题的输入类似于n = 100,则输出将为18,因为数字为1到9以及11、22、... 99,所以共有18个数字。

步骤

为了解决这个问题,我们将遵循以下步骤 -

s := 0
for initialize p := 1, when p <= n, update (increase s by 1), do:
   p := p / ((p mod 10) * (p mod 10 + 1))
   if p mod 10 is same as 0, then:
      (increase p by 1)
return s

示例

让我们看看以下实现以获得更好的理解 -

#include <bits/stdc++.h>
using namespace std;
int solve(int n){
   int s = 0;
   for (int p = 1; p <= n; s++){
      p = p / (p % 10) * (p % 10 + 1);
      if (p % 10 == 0)
         p++;
   }
   return s;
}
int main(){
   int n = 100;
   cout << solve(n) << endl;
}

输入

100

输出

18

更新于: 2022年4月8日

609 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告