우리에게 num과 같은 자연수가 주어졌으며 모든 순열이 그 숫자보다 큰 모든 자연수의 개수를 계산하는 작업입니다.
다음 조건으로 작업하고 있습니다. -
-
데이터는 자연수여야 합니다.
-
자연수의 모든 가능한 순열이나 배열은 주어진 숫자보다 크거나 같아야 합니다. 예를 들어 숫자는 20입니다.
-
1, 즉 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이 됩니다.
-
입력 - 숫자 =10
출력 - 개수는 9입니다.
설명 - 숫자 1, 2, 3, 4, 5, 6, 7, 8, 9는 어떤 식으로든 배열했을 때 숫자와 같은 숫자입니다.
입력 - 숫자 =13
출력 - 개수는 12입니다.
설명 - 숫자 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12<21, 13<31은 어떤 식으로든 배열했을 때 그 숫자보다 큰 숫자입니다.
아래 프로그램에서 사용된 접근 방식은 다음과 같습니다.
-
숫자 num의 값 입력
-
숫자 자체보다 크거나 같은 순열을 갖는 숫자가 항상 9개 이상 있으므로 max_size를 9로 설정합니다.
-
0에서 max_size까지 루프 시작
-
루프 내에서 목록 유형 변수를 생성하고 i가 num IF yes보다 작거나 같은지 확인한 다음 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; }
출력
위의 코드를 실행하면 다음과 같은 결과가 나옵니다. -
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