计算所有排列都大于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 1count 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