洛谷---P1098 字符串的展开(java)
这道题需要考虑的情况也太多了吧()
尤其是 开头、结尾为‘-’,还会出现连续的“- -”,这种情况在刚开始的时候是没有考虑到的,还有就是对于数字与字母的ASCII码应用非常不熟练,如何进行相互的转换需要去百度搜索。
1、将 字符转化为 他的十进制的int 值
这个还比较简单,直接 ‘a’-‘0’+48(‘a’-‘0’+‘0’)就可以了
2、将十进制的数 转换为字符
代码中字符差值部分用起来时 并没有转换为 ASCII的十进制数,因为只需要他们的差值
package _5_19;
import java.util.Scanner;
public class _1098 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int p1 = sc.nextInt();
int p2 = sc.nextInt();
int p3 = sc.nextInt();
String s = sc.next();
String[] c = s.split("-");
for(int i=0;i<c.length;i++) {
System.out.println(c[i]);
}
String t = "";
for(int i=0;i<c.length-1;i++) {
if(c[i].equals("")) {
t = t+"-";
}else if((!c[i].equals("0")&&c[i+1].equals(""))) {
t= t+c[i]+"-";
}else {
char c1[] = c[i].toCharArray();
char c2[] = c[i+1].toCharArray();
if(((c1[c[i].length()-1]-'0')>=0)&&((c1[c[i].length()-1]-'0')<=9)&&(c2[0]-'0'+48>=65)) {
t = t+c[i]+"-";
}else {
if((c2[0]-'0')-(c1[c[i].length()-1]-'0')>=1) {
t = t+c[i];
if(p1==1&&p3==1) {
for(int j=(c1[c[i].length()-1]-'0')+1;j<c2[0]-'0';j++) {
int k=0;
while(k<p2) {
t= t+((char)(j+48));
k++;
}
}
}else if(p1==1&&p3==2) {
for(int j=c2[0]-'0'-1;j>=(c1[c[i].length()-1]-'0')+1;j--) {
int k=0;
while(k<p2) {
t= t+((char)(j+48));
k++;
}
}
}else if(p1==2&&p3==1) {
for(int j=(c1[c[i].length()-1]-'0')+1;j<c2[0]-'0';j++) {
int k=0;
while(k<p2) {
t= t+(String.valueOf((char)(j+48)).toUpperCase());
k++;
}
}
}else if(p1==2&&p3==2) {
for(int j=c2[0]-'0'-1;j>=(c1[c[i].length()-1]-'0')+1;j--) {
int k=0;
while(k<p2) {
t= t+(String.valueOf((char)(j+48)).toUpperCase());
k++;
}
}
}else {
for(int j=(c1[c[i].length()-1]-'0')+1;j<c2[0]-'0';j++) {
int k=0;
while(k<p2) {
t= t+("*");
k++;
}
}
}
}else {
t = t+c[i]+"-";
}
}
}
}
t = t+c[c.length-1];
if(s.endsWith("-")) {
t= t+"-";
System.out.println(t);
}else {
System.out.println(t);
}
}
}
最后一种情况时 就是最后会有“-“,要另外进行判断,因为刚开始拆分时并没有保存