解题思路:
规则简述 数字和字母规则相同。 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语言代码)浏览:728 |
C语言程序设计教程(第三版)课后习题10.7 (C语言代码)浏览:958 |
简单的a+b (C语言代码)浏览:335 |
剪刀石头布 (C语言代码)浏览:1746 |
矩形面积交 (C++代码)浏览:1125 |
母牛的故事 (C语言代码)浏览:560 |
C语言程序设计教程(第三版)课后习题5.4 (C语言代码)浏览:454 |
C语言程序设计教程(第三版)课后习题7.3 (C语言代码)浏览:440 |
ACM俱乐部密码浏览:935 |
printf基础练习2 (C语言代码)浏览:598 |