计算所有排列都大于C ++中该数字的自然数

我们正在以下条件下工作-

  • 数据应仅是自然数

  • 自然数的所有可能排列或排列应等于或大于给定数。例如,数字是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;

//计算自然数的函数,其

//所有排列都大于该数字

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){

         //在列表末尾插入元素

         lists.push_back(i);

         count = count + 1;

      }

      //迭代器从列表的末尾开始

      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;

}

输出结果

如果运行上面的代码,我们将获得以下输出-

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

以上是 计算所有排列都大于C ++中该数字的自然数 的全部内容, 来源链接: utcz.com/z/322275.html

回到顶部