网易“aazz”题目

#include <iostream>
#include <string>
#include <vector>
using namespace std;

//m个'z',n个'a' 顺序串
string get_az_string(int n,int m)
{ int i=0;
string p="";
for(;i<m; i)
p=p "z";
for(i=0;i<n; i)
p=p "a";
return p;
}
//n个'a',m个'z'中获取第k个字符,并拼接在jieguo后面
void get_jieguo(int n,int m,int k,string *jieguo)
{
if(n==0 || m==0)
{
*jieguo =(*jieguo) get_az_string(n,m);
return ;
}
int i=0;
//以m个'z'开始的字符串群中,第一个的序号
vector<long long >  index_of_z(m 1);
long long  start=1;
//计算全排列C(n,n m).C(n,n m-1).....C(n,n)
for(i=m 1;i<=m n; i)
start=start*i;
for(i=1;i<=n; i)
start=start/i;
index_of_z[0]=start;
for(i=1;i<=m; i)
{
start=start*(m-i 1)/(n m-i 1);
index_of_z[i]=start;
}

for(i=1;i<=m; i)
index_of_z[i]=index_of_z[0]-index_of_z[i] 1;
index_of_z[0]=1;

//查到k所在的区间
int index=-1;
for(i=0;i<m; i)
{
if(k>=index_of_z[i] && k<index_of_z[i 1])
{
index=i;
break;
}
}

if(index==-1) //排在最后面
{
*jieguo =(*jieguo) get_az_string(n,m);
}
else
{
if(index==0) //以0个'z'开头,递归查找
{
*jieguo =(*jieguo) "a";
get_jieguo(n-1,m,k,jieguo);
}
else //以index个'z'开头,递归查找
{
*jieguo =(*jieguo) get_az_string(0,index);
get_jieguo(n,m-index,k-index_of_z[index] 1,jieguo);
}
}
return ;
}

//获取C(n,m),即m中取n个数,n最小为多少时候超过k,-1表示不存在
int get_min(int m,int k)
{
if(k==1)
return 0;

long long  count=1;
int jieguo=1;
int mid=m/2;
for(jieguo=1;jieguo<=mid; jieguo)
{
count=count*(m-jieguo 1)/jieguo;
if(count>=k)
return jieguo;
}
return -1;
}

int main()
{
int n,m,k,i,p;
cin>>n>>m>>k;

//求辅助边界
vector<int> max_n(201);
for(i=1;i<=200; i)
max_n[i]=get_min(i,k);

//校验缩小范围
bool exit_jieguo=false;
for(p=0;p<=n; p)
{
if(max_n[p m]!=-1 && p>=max_n[p m])
{
exit_jieguo=true;
break;
}
}
if(!exit_jieguo)
{
cout<<-1;
return 0;
}

//前n-p个全是'a'
string *jieguo=new string;
*jieguo=*jieguo get_az_string(n-p,0);

//递归求结果
get_jieguo(p,m,k,jieguo);
cout<<*jieguo<<endl;
return 0;
}
#笔试题目##网易#
全部评论
//为啥不用编程语言的格式,感觉挺方便呀。
点赞 回复 分享
发布于 2018-08-12 10:45
点赞 回复 分享
发布于 2018-08-12 10:05

相关推荐

07-03 11:02
中山大学 C++
字节刚oc,但距离九月秋招很近了有两段互联网实习,非腾讯字节。不敢赌转正,现在在纠结去还是不去如果实习俩月离职会有什么后果吗
阿城我会做到的:不去后悔一辈子,能否转正取决于ld的态度,只要他不卡,答辩就是走流程,个人觉得可以冲一把
投递字节跳动等公司8个岗位
点赞 评论 收藏
分享
机械打工仔:我来告诉你原因,是因为sobb有在线简历,有些HR为了快会直接先看在线简历,初步感觉不合适就不会找你要详细的了
投了多少份简历才上岸
点赞 评论 收藏
分享
每晚夜里独自颤抖:要求太多的没必要理
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务