原题链接:蓝桥杯算法训练VIP-字符串的展开
解题思路:
规则简述 数字和字母规则相同。 1, d-e => de; e-d =>e-d 如果右大于左一个,则去掉-号,否则不变。 2, p1=1,填充小写 p1=2,填充大写 p1=3,数字和字母都填充“*” 3, p2=k,填充k次 4, p3=1,顺序填写, p3=2,逆序填写
注意事项:
测试数据很刁钻。有连续两个"--",或者开头和结尾有'-'。
题目中并没有提示这些,但我仍然觉得它是一个关于java字符串方面的好题,同时对于程序鲁棒性也有一定的考验。
参考代码:
import java.util.Scanner; public class Main { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Scanner sc=new Scanner(System.in); int p1=sc.nextInt(); int p2=sc.nextInt();//k int p3=sc.nextInt(); String str=sc.next(); for (int i = 0; i < str.length(); i++) { char item_=str.charAt(i);// '-' if (i==0 && item_=='-') {//意外情况 System.out.print(item_); continue; } if (i==str.length()-1 && item_=='-') {//意外情况 System.out.print(item_); continue; } if (item_=='-') { char item_left=str.charAt(i-1); //'-'左字符 char item_right=str.charAt(i+1); //'-'右字符 if (item_right==item_left+1) { continue; } if (item_right<=item_left || Character.isDigit(item_left)!=Character.isDigit(item_right) || Character.isUpperCase(item_left)!=Character.isUpperCase(item_right) || Character.isLowerCase(item_left)!=Character.isLowerCase(item_right)) { //当-前后类型不同时,也是原样输出。。。 System.out.print(item_); continue; } int n=item_right-item_left-1;//需要循环字符个数 if (p1==3) { for (int j = 0; j <n; j++) { for (int k = 0; k <p2; k++) { System.out.print('*'); } } }else if (p1==2 || p1==1) { char temp=item_left; String tempStr=""; for (int j = 0; j <n; j++) { temp++; for (int k = 0; k <p2; k++) { tempStr+=temp; } } if (p3==2) {//反序 tempStr=new StringBuffer(tempStr).reverse().toString(); } if (p1==2) { tempStr= tempStr.toString().toUpperCase(); }else if (p1==1) { tempStr= tempStr.toString().toLowerCase(); } System.out.print(tempStr); } }else { System.out.print(item_); } } } }
0.0分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复