第十一届蓝桥杯校内模拟赛——数位递增

// 问题描述
// 一个正整数如果任何一个数位不大于右边相邻的数位,则称为一个数位递增的数,例如 1135
// 是一个数位递增的数,而 1024不是一个数位递增的数。
// 给定正整数 n ,请问在整数 1 至 n中有多少个数位递增的数?
// 输入格式
// 输入的第一行包含一个整数 n
// 输出格式
// 输出一行包含一个整数,表示答案。
// 评测用例规模与约定
// 对于 40%
// 的评测用例,1<=n<=1000。
// 对于 80% 的评测用例,1<=n<=100000。
// 对于所有评测用例,1<=n<=1000000。


//暴力:循环(1,n) 每一个数,然后判断每位是否递增

//灵活一点:构造从1-n的数位递增的数(递归

#include
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<     return 0;
}

你可能感兴趣的:(蓝桥杯)