第十一屆藍橋杯校內模擬賽——數位遞增

// 問題描述
// 一個正整數如果任何一個數位不大於右邊相鄰的數位,則稱爲一個數位遞增的數,例如 1135
// 是一個數位遞增的數,而 1024不是一個數位遞增的數。
// 給定正整數 n ,請問在整數 1 至 n中有多少個數位遞增的數?
// 輸入格式
// 輸入的第一行包含一個整數 n
// 輸出格式
// 輸出一行包含一個整數,表示答案。
// 評測用例規模與約定
// 對於 40%
// 的評測用例,1<=n<=1000。
// 對於 80% 的評測用例,1<=n<=100000。
// 對於所有評測用例,1<=n<=1000000。


//暴力:循環(1,n) 每一個數,然後判斷每位是否遞增

//靈活一點:構造從1-n的數位遞增的數(遞歸

#include<bits/stdc++.h>
using namespace std;

int n;
int sum = 0;

void dfs(int num)
{
    for(int i = num%10 ? num%10 : 1; i <= 9; i++){
        if(num*10+i <= n){
            sum++;
            dfs(num*10+i);
        }
    }
}

int main()
{
    cin>>n;
    dfs(0);                     //從零開始構造數位遞增
    cout<<sum<<endl;
    return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章