使用 C++ 统计所有排列都大于该数的自然数


给定一个自然数,例如 num,任务是计算所有这些自然数的个数,其所有排列都大于该数。

我们遵循以下条件

  • 数据只能是自然数

  • 自然数的所有可能排列或组合必须等于或大于给定数。例如,数字是 20

    • 考虑从 1 到 20 的所有数字,即 1、2、3、4、5、6、7、8、9、10、11、12、13、14、15、16、17、18、19、20

    • 现在检查那些排列或组合等于或大于给定数字(即 20)的数字。数字为 1、2、3、4、5、6、7、8、9、11=11、12<21、13<31、14<41、15<51、16<61、17<71、18<81、19<91。所以计数将是 18。

输入 − num = 10

输出 − 计数为 9

说明 − 数字 1、2、3、4、5、6、7、8、9 在任何排列方式下都等于该数字。

输入 − num = 13

输出 − 计数为 12

说明 − 数字 1、2、3、4、5、6、7、8、9、11、12<21、13<31 在任何排列方式下都等于或大于该数字。

下面程序中使用的方案如下

  • 输入数字 num 的值

  • 将 max_size 设置为 9,因为始终至少有 9 个数字的排列等于或大于该数字本身。

  • 从 0 开始循环到 max_size

  • 在循环内,创建一个列表类型的变量,并检查 i 是否小于或等于 num。如果是,则将 i 插入列表并使计数加 1

  • 从列表的末尾遍历到开头,并从第一个元素开始另一个循环到 9。

  • 检查 temp 是否小于或等于 num,如果是,则将 temp 推送到列表的前面并使计数加 1

  • 返回计数

  • 打印结果。

示例

 在线演示

#include<bits/stdc++.h>
using namespace std;
//function to Count natural numbers whose
//all permutation are greater than that number
void count(int num){
   int count = 0;
   int max_size = 9;
   for (int i = 1; i <= max_size; i++){
      list<int> lists;
      if (i <= num){
         //insert element at the end of the list
         lists.push_back(i);
         count = count + 1;
      }
      //iterator starts from the last of the list
      for(auto iter = lists.end(); iter != lists.begin(); ++iter){
         int first_ele = lists.front();
         lists.pop_front();
         for (int next = first_ele%10; next <= 9; next++){
            int temp = first_ele*10 + next;
            if (temp <= num){
               lists.push_front(temp);
               count++;
            }
         }
      }
   }
   cout<<"count of num "<<num <<" is "<<count<<endl;
}
int main(){
   count(1);
   count(9);
   count(7);
   count(0);
   count(12);
   return 0;
}

Explore our latest online courses and learn new skills at your own pace. Enroll and become a certified expert to boost your career.

输出

如果我们运行以上代码,我们将得到以下输出:

count of num 1 is 1
count of num 9 is 9
count of num 7 is 7
count of num 0 is 0
count of num 12 is 11

更新于: 2020年6月6日

313 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告