欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 养生 > 蓝桥杯第二天:2023省赛C 1题 分糖果

蓝桥杯第二天:2023省赛C 1题 分糖果

2025/3/11 21:19:56 来源:https://blog.csdn.net/qq_62691586/article/details/146137842  浏览:    关键词:蓝桥杯第二天:2023省赛C 1题 分糖果

	public static void main(String[] args) {Scanner scan = new Scanner(System.in);int n,x;n = scan.nextInt();x = scan.nextInt();String res1;res1 = scan.next();char res[] = res1.toCharArray();Arrays.sort(res);//第一种情况:糖果是aaaaaa...这种类型的(一个种类的)if(res[0]==res[n-1]) {int n1 = n/x;for(int i = 0;i<n1;i++) {System.out.print(res[i]);}n1 = n%x;//看看有没有剩余的if(n1!=0)System.out.print(res[0]);//  int count = n / x + (n % x == 0 ? 0 : 1);//       for (int i = 0; i < count; i++) System.out.print(res[i]);}//第二种情况 :糖果是假设aaabbbccc x=1(x小于首字母的个数) else if(res[0]==res[x-1]) {// aaabcdefg 三个人 这种必须是 a  a  abcdefg 如果剩下的这些(bcdefg)让三个人平分的话,就不能保证最小的是ab..打头的了for(int i = x-1;i<n;i++) {System.out.print(res[i]);}	}//第三种情况 :糖果是假设abbbccc x=5(x小于首字母的个数) abceeee 3else if(res[0]!=res[x-1]){//如abceeee 3 这个例子, a 打头给一个人  b 打头给一个人, c 给一个人 剩下eeee这些分给a 、b打头的这俩,最大的还是cSystem.out.print(res[x-1]);}}

 代码虽然能通过100%测试用例(20个)但是有一种情况不能处理

这种情况应该输出ab就是三个都一样,

把第二部分代码修改一下就好了,加一种判断这种类型:

好了完整代码是这样的

	public static void main(String[] args) {Scanner scan = new Scanner(System.in);int n,x;n = scan.nextInt();x = scan.nextInt();String res1;res1 = scan.next();char res[] = res1.toCharArray();Arrays.sort(res);//第一种情况:糖果是aaaaaa...这种类型的(一个种类的)if(res[0]==res[n-1]) {int n1 = n/x;for(int i = 0;i<n1;i++) {System.out.print(res[i]);}n1 = n%x;//看看有没有剩余的if(n1!=0)System.out.print(res[0]);//  int count = n / x + (n % x == 0 ? 0 : 1);//       for (int i = 0; i < count; i++) System.out.print(res[i]);}//第二种情况 :糖果是假设aaabbbccc x=1(x小于首字母的个数) else if(res[0]==res[x-1]) {// aaabcdefg 三个人 这种必须是 a  a  abcdefg 如果剩下的这些(bcdefg)让三个人平分的话,就不能保证最小的是ab..打头的了int flag = 0;	if(n%x==0) {flag = 1;	for(int i = 1;(x*(i+1)-1)<n;i++) {if(res[x*i]!=res[x*(i+1)-1]) {flag = 0;break;}}}if(flag==0) {for(int i = x-1;i<n;i++) {System.out.print(res[i]);}	}else {for(int i =0;i<n;i=i+x) {System.out.print(res[i]);}}}//第三种情况 :糖果是假设abbbccc x=5(x小于首字母的个数) abceeee 3else if(res[0]!=res[x-1]){//如abceeee 3 这个例子, a 打头给一个人  b 打头给一个人, c 给一个人 剩下eeee这些分给a 、b打头的这俩,最大的还是cSystem.out.print(res[x-1]);}}

进行调试:可以满足这种情况了

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com