题目链接:1.分糖果 - 蓝桥云课 (lanqiao.cn)
字典序
又称字母序,表示英文单词在字典中的先后顺序。
英文中的字母表按照如下的顺序排列:
ABCDEFG HIJKLMN OPQRST UVWXYZ
abcdefg hijklmn opqrst uvwxyz
在字典中,单词是按照首字母在字母表中的顺序进行排列的,比如 apple 在 banana 之前。而第一个字母相同时,会去比较两个单词的第二个字母在字母表中的顺序,比如 account 在 advanced 之前,以此类推。
程序代码:
package lanqiao;
import java.util.Arrays;
import java.util.Scanner;
/**
* 2023/11/26
*/
public class lanqiao2928_分糖果 {
//最大字典序的最小化
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();//糖果数目
int x = scan.nextInt();//同学数目
char[] chars = scan.next().toCharArray();//每个同学的开心程度
Arrays.sort(chars);//对数组排序(从小到大)
int cnt = 0;//记录排序后,前面有几个字符是相同的
int i = 0;//索引
while (i < n && chars[i] == chars[0]) {//判断排序后的数组
i++;
cnt++;//标记有几个字符是相同的
}
if (cnt >= x) {//如果相同的字符数大于同学数,则说明每个字符串的第一个字符都相同
System.out.print(chars[0]);//输出第一个字符
if (chars[x] == chars[n - 1]) {//如果剩下的字符全部相同(已经排好序的数组最后一个字符和最后一个同学分到的字符相同,则说明这其中的所有字符都相同)
for (int j = 0; j < n / x; j++) {//把剩余的字符平均分成x等份,则可以得到结果
System.out.println(chars[x]);//
}
} else {//如果剩下的字符不相同,则把剩下的字符全部分给第一个同学
System.out.println(String.valueOf(chars).substring(x));
}
} else {//如果相同的字符数小于同学数,则输出排好序的数组的第x位
System.out.println(chars[x - 1]);
}
}
}
运行结果:
6 2
caabdc
abccd
进程已结束,退出代码为 0