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\n",ans);
    }
    return 0;
}
View Code

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

posted @ 2019-03-20 20:50  better46  阅读(241)  评论(0编辑  收藏  举报