拼多多笔试题(三):多多的电子字典

news/2024/10/31 1:25:42/

问题描述:

多多鸡打算造一本自己的电子字典,里面的所有单词都只由a和b组成。
每个单词的组成里a的数量不能超过N个且b的数量不能超过M个。
多多鸡的幸运数字是K,它打算把所有满足条件的单词里的字典序第K小的单词找出来,作为字典的封面。

输入描述:

共一行,三个整数N, M, K。(0 < N, M < 50, 0 < K < 1,000,000,000,000,000)

输出描述:

共一行,为字典序第K小的单词。

输入例子:

2 1 4

输出例子:

ab

例子说明:

满足条件的单词里,按照字典序从小到大排列的结果是
a
aa
aab
ab
aba
b
ba
baa

 思路分析:

dp[n][m]表示n个a,m个b的单词数量dp[n][m] = 1 + dp[n-1][m] + 1 + dp[n][m-1],根据K倒推,是前半部分,还是后半部分,来确定第一个字母是 a,还是b,注意dp[n][m] 可能超过long类型的范围,所以,用BigInteger来存dp。

代码实现:

import java.util.*;
import java.math.*;
public class Main{public static void main(String[] args){BigInteger[][] dp = new BigInteger[50][50];Scanner sc = new Scanner(System.in);int N = sc.nextInt();int M = sc.nextInt();long K = sc.nextLong();for(int i=0;i<=N;i++){dp[i][0] = new BigInteger(Integer.toString(i));}for(int i=0;i<=M;i++){dp[0][i] = new BigInteger(Integer.toString(i));}for(int i=1;i<=N;i++){for(int j=1;j<=M;j++){//dp[i][j] = 1+dp[i-1][j] + 1+ dp[i][j-1];dp[i][j] = dp[i-1][j].add(dp[i][j-1]).add(new BigInteger("2"));}}StringBuilder sb = new StringBuilder();int n = N, m = M;long k = K;while(k>0){if(n>0 && m>0){if(dp[n-1][m].compareTo(new BigInteger(Long.toString(k-1)))>=0){//k<=dp[n-1][m]+1k--;sb.append('a');n--;}else{ //k>dp[n-1][m]+1k -= dp[n-1][m].longValue()+2;sb.append('b');m--;}}else if(n>0 && m==0){k--;sb.append('a');n--;}else if(n==0 && m>0){k--;sb.append('b');m--;}else{k=0;}}System.out.println(sb.toString());}
}

http://www.ppmy.cn/news/276682.html

相关文章

你觉得java与嵌入式学哪个好?

只要是现在选择嵌入式的学员&#xff0c;都是因为嵌入式未来发展好&#xff0c;薪资待遇好&#xff0c;那么java是不是也拥有这些特点呢&#xff1f;如果你还不了解这些的话&#xff0c;那么下面就要跟紧小编了&#xff0c;一起来了解下Java与嵌入式学哪个好吧。 点击获取1V1嵌…

嵌入式技术的前沿应用领域

嵌入式系统是以应用为中心&#xff0c;以计算机技术为基础&#xff0c;并且软硬件可剪裁&#xff0c;适用于应用系统对功能、可靠性、成本、体积和功耗有严格要求的专用计算机系统 嵌入式系统在当下生活中应用非常广泛&#xff0c;应用于电信系统、电子类产品、医疗设备、智能家…

什么叫嵌入式开发 嵌入式开发的要求

嵌入式开发就是指在嵌入式操作系统下进行开发&#xff0c;常用的系统有wince&#xff0c;ucos&#xff0c;vxworks&#xff0c;linux&#xff0c;android等。 另外&#xff0c;用c&#xff0c;c或汇编开发&#xff1b;用高级处理器&#xff0c;arm7&#xff0c;arm9&#xff0…

java电子小词典课程设计_Java英汉电子字典课程设计源代码.doc

用户需求分析&#xff1a; 英汉同典作为一个常用的学习工具&#xff0c;是我们经常要使用的。该系统能完成一个简 单的电子词的功能。该系统主要用于实现英汉互译的功能&#xff0c;系统拥有自己的数据 库。 英译汉功能&#xff1a;我们对以先选择让系统进行英译汉功能&#xf…

java电子字典

这段时间,在写个背单词的软件,就顺手写了个电子词典, 等完成了一起发布 初期找了好久字典库,发现网上没有公开的字典库,都是有版权的,而且还加密了,比如灵格斯的,都加密了, 最后选了用星际译王 早前用的牛津 词典库,也是要版权的,星际译王也侵权用了,也没办法了,反正写来自用…

网络编程重点

1> OIS 7层模型 TCP/IP 4层模型 5层模型 2> 传输层的功能 网络层的功能&#xff1f;以及分别是第几层 传输层&#xff1a;提供端到端的可靠传输&#xff0c;指定哪个进程哪个发送进程接收 第四层 网络层&#xff1a;寻址和路由选择 第三层 3>MAC地址&#xff1a; a. …

生活中常见的嵌入式产品都有哪些?

经常在说嵌入式已经融进我们的生活&#xff0c;可能还有些人不信&#xff0c;肯定觉得嵌入式开发并没有那么神奇&#xff0c;这样理解其实也很正常&#xff0c;要是对嵌入式没有了解&#xff0c;这些都是可能的&#xff0c;下面就一起来了解下生活中常见的嵌入式产品都有哪些吧…

电子词典的实现

电子词典的实现 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #define MAX 111111 //最大记录数 struct dict { char *key; char *content; }; //打开字典文件&#xff0c;并读取文…