hdu6468 zyb的面试 (思维)

题目传送门

题意:

将1~n个数按字典序排序后,求第k个数

思路:

代码:

#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<string>
#include<string.h>
#include<math.h>
#include<map>
using namespace std;
typedef long long ll;
int ans;
int n,k;
bool flag;
int cnt;


void dfs(int x,int &cnt)
{//cout<<x<<" "<<cnt<<endl;
    if(flag) return ;
    if(x>n||cnt>k) return ;
    if(cnt==k) {
        ans=x;
        flag=1;
        return ;
    }
    for(int i=10*x;i<10*(x+1);i++)
        {
          if(i>n) return ;//注意这里在hdu写成if(i<n)会超时
          dfs(i,++cnt);
        }

}
int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        ans=0;
        scanf("%d %d",&n,&k);
         cnt=0;
        flag=0;
        for(int i=1;i<=9;i++)
         dfs(i,++cnt);
        printf("%d
",ans);
    }
    return 0;
}
View Code

参考博客:https://www.cnblogs.com/zquzjx/p/10560280.html

原文地址:https://www.cnblogs.com/zhgyki/p/10567580.html