精华内容
下载资源
问答
  • 字符串展开 问题描述 示例 输入1: 1 2 1 abcs-w1234-9s-4zz 输出1: abcsttuuvvw1234556677889s-4zz 输入2: 2 3 2 a-d-d 输出2: aCCCBBBd-d 输入3: 3 4 2 di-jkstra2-6 输出3: dijkstra2*******...

    字符串的展开

    问题描述
    题干
    描述

    示例
    输入1:

    1 2 1
    abcs-w1234-9s-4zz

    输出1:

    abcsttuuvvw1234556677889s-4zz

    输入2:

    2 3 2
    a-d-d

    输出2:

    aCCCBBBd-d

    输入3:

    3 4 2
    di-jkstra2-6

    输出3:

    dijkstra2************6

    运行限制 : 最大运行时间:1s 最大运行内存: 128M

    import java.util.Scanner;
    
    public class Main {
    	
    	static StringBuilder sb;
    	static int p1;
    	static int p2;
    	static int p3;
    	public static void main(String[] args) {
    		Scanner sc = new Scanner(System.in);
    		p1 = sc.nextInt();
    		p2 = sc.nextInt();
    		p3 = sc.nextInt();sc.nextLine();
    		sb = new StringBuilder(sc.nextLine());
    		for (int i = 1; i < sb.length()-1; i++) {
    			if(sb.charAt(i) == '-') {
    				if(is(i))
    					exp(i);
    			}
    		}
    		System.out.println(sb);
    	}
    	private static void exp(int index) {
    			char a = sb.charAt(index-1);
    			char b = sb.charAt(index+1);
    			sb.deleteCharAt(index);
    			if(a < b-1){
    				StringBuilder s2 = new StringBuilder();
    				if(p1 == 3){
    					for (int i = 1; i <=(b-a-1)*p2; i++)s2.append('*');
    				}else if(b <= 57 || p1 == 1){
    					for (char i = (char)(a+1); i < b; i++) {
    						for (int j = 1; j <= p2; j++) 
    							s2.append(i);
    					}	
    				}else{
    					for (char i = (char)(a+1-32); i < b-32; i++) {
    						for (int j = 1; j <= p2; j++) 
    							s2.append(i);
    					}	
    				}
    				if(p3 == 2)s2.reverse();
    				sb.insert(index,s2);
    				s2.delete(0, s2.length()-1);
    			}
    	}
    	private static boolean is(int index) {
    		if(index == 0 || index == sb.length()-1)
    			return false;
    		char a = sb.charAt(index-1);
    		char b = sb.charAt(index+1);
    		if(a < b) {
    			if(48 <= a && a <= 57 && 48 <= b && b <= 57)return true;
    			if(97 <= a && a <= 122 && 97 <= b && b <= 122)return true;
    		}
    		return false;
    	}
    }
    
    展开全文
  •  在初赛普及组的“阅读程序写结果”的问题中,我们曾给出一个字符串展开的例子:如果在输入的字符串中,含有类似于“d-h”或者“4-8”的字串,我们就把它当作一种简写,输出时,用连续递增的字母获数字串替代其中的...

    java蓝桥杯练习 字符串的展开

    资源限制
    时间限制:1.0s 内存限制:256.0MB
      在初赛普及组的“阅读程序写结果”的问题中,我们曾给出一个字符串展开的例子:如果在输入的字符串中,含有类似于“d-h”或者“4-8”的字串,我们就把它当作一种简写,输出时,用连续递增的字母获数字串替代其中的减号,即,将上面两个子串分别输出为“defgh”和“45678”。在本题中,我们通过增加一些参数的设置,使字符串的展开更为灵活。具体约定如下:
      (1) 遇到下面的情况需要做字符串的展开:在输入的字符串中,出现了减号“-”,减号两侧同为小写字母或同为数字,且按照ASCII码的顺序,减号右边的字符严格大于左边的字符。
      (2) 参数p1:展开方式。p1=1时,对于字母子串,填充小写字母;p1=2时,对于字母子串,填充大写字母。这两种情况下数字子串的填充方式相同。p1=3时,不论是字母子串还是数字字串,都用与要填充的字母个数相同的星号“”来填充。
      (3) 参数p2:填充字符的重复个数。p2=k表示同一个字符要连续填充k个。例如,当p2=3时,子串“d-h”应扩展为“deeefffgggh”。减号两边的字符不变。
      (4) 参数p3:是否改为逆序:p3=1表示维持原来顺序,p3=2表示采用逆序输出,注意这时候仍然不包括减号两端的字符。例如当p1=1、p2=2、p3=2时,子串“d-h”应扩展为“dggffeeh”。
      (5) 如果减号右边的字符恰好是左边字符的后继,只删除中间的减号,例如:“d-e”应输出为“de”,“3-4”应输出为“34”。如果减号右边的字符按照ASCII码的顺序小于或等于左边字符,输出时,要保留中间的减号,例如:“d-d”应输出为“d-d”,“3-1”应输出为“3-1”。
    输入格式
      输入包括两行:
      第1行为用空格隔开的3个正整数,一次表示参数p1,p2,p3。
      第2行为一行字符串,仅由数字、小写字母和减号“-”组成。行首和行末均无空格。
    输出格式
      输出只有一行,为展开后的字符串。
    输入输出样例1
    输入
    1 2 1
    abcs-w1234-9s-4zz
    输出
    abcsttuuvvw1234556677889s-4zz
    输入输出样例2
    输入
    2 3 2
    a-d-d
    输出
    aCCCBBBd-d
    输入输出样例3
    输入
    3 4 2
    di-jkstra2-6
    输出
    dijkstra2
    ***********6
    数据规模和约定
      40%的数据满足:字符串长度不超过5
      100%的数据满足:1<=p1<=3,1<=p2<=8,1<=p3<=2。字符串长度不超过100

    //java代码
    import java.util.Scanner;
    
    public class Main {
    
        private static boolean isTypeEqual(char var1, char var2) {
            return (var1 < var2) && ((Character.isDigit(var1) && Character.isDigit(var2)) ||
                    (Character.isLowerCase(var1) && Character.isLowerCase(var2)));
        }
    
        private static void generateAppendString(char from, char to, StringBuilder result, int times,
                boolean isStar, boolean isUpper, boolean isReversed) {
            if (isReversed) {
                for (char i = (char)(to-1); i > from; i--) {
                    char add = isStar ? '*' : (Character.isDigit(i) ? i : ((isUpper ? (char)(i-32) : i)));
                    for (int j = 0; j < times; j++) {
                        result.append(add);
                    }
                }
            } else {
                for (char i = (char)(from+1); i < to; i++) {
                    char add = isStar ? '*' : (Character.isDigit(i) ? i : ((isUpper ? (char)(i-32) : i)));
                    for (int j = 0; j < times; j++) {
                        result.append(add);
                    }
                }
            }
        }
    
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
            int p1 = scanner.nextInt(), p2 = scanner.nextInt(), p3 = scanner.nextInt();
            boolean isStar = p1 == 3;
            boolean isUpper = p1 == 2;
            boolean isReversed = p3 == 2;
            String line = scanner.next();
            scanner.close();
            StringBuilder result = new StringBuilder();
            char[] chars = line.toCharArray();
            for (int i = 0; i < line.length()-2; i++) {
                result.append(chars[i]);
                if (chars[i+1] == '-') {
                    if (isTypeEqual(chars[i], chars[i+2])) {
                        generateAppendString(chars[i], chars[i+2], result, p2, isStar, isUpper, isReversed);
                        ++i;
                    } else {
                        result.append(chars[++i]);
                    }
                }
            }
            if (chars[line.length()-2] != '-' || chars[line.length()-3] == '-') {
                result.append(chars[line.length()-2]);
            }
            result.append(chars[line.length()-1]);
            System.out.println(result);
        }
    }
    
    
    展开全文
  • Java 蓝桥杯 算法训练 字符串展开 (JAVA语言实现)

    万次阅读 多人点赞 2019-03-16 15:38:46
    在初赛普及组的“阅读程序写结果”的问题中,我们曾给出一个字符串展开的例子:如果在输入的字符串中,含有类似于“d-h”或者“4-8”的字串,我们就把它当作一种简写,输出时,用连续递增的字母获数字串替代其中的...

    **

    算法训练 字符串的展开

    **
    题目:

    在初赛普及组的“阅读程序写结果”的问题中,我们曾给出一个字符串展开的例子:如果在输入的字符串中,含有类似于“d-h”或者“4-8”的字串,我们就把它当作一种简写,输出时,用连续递增的字母获数字串替代其中的减号,即,将上面两个子串分别输出为“defgh”和“45678”。在本题中,我们通过增加一些参数的设置,使字符串的展开更为灵活。具体约定如下:
      (1) 遇到下面的情况需要做字符串的展开:在输入的字符串中,出现了减号“-”,减号两侧同为小写字母或同为数字,且按照ASCII码的顺序,减号右边的字符严格大于左边的字符。
      (2) 参数p1:展开方式。p1=1时,对于字母子串,填充小写字母;p1=2时,对于字母子串,填充大写字母。这两种情况下数字子串的填充方式相同。p1=3时,不论是字母子串还是数字字串,都用与要填充的字母个数相同的星号“”来填充。
      (3) 参数p2:填充字符的重复个数。p2=k表示同一个字符要连续填充k个。例如,当p2=3时,子串“d-h”应扩展为“deeefffgggh”。减号两边的字符不变。
      (4) 参数p3:是否改为逆序:p3=1表示维持原来顺序,p3=2表示采用逆序输出,注意这时候仍然不包括减号两端的字符。例如当p1=1、p2=2、p3=2时,子串“d-h”应扩展为“dggffeeh”。
      (5) 如果减号右边的字符恰好是左边字符的后继,只删除中间的减号,例如:“d-e”应输出为“de”,“3-4”应输出为“34”。如果减号右边的字符按照ASCII码的顺序小于或等于左边字符,输出时,要保留中间的减号,例如:“d-d”应输出为“d-d”,“3-1”应输出为“3-1”。
    输入格式
      输入包括两行:
      第1行为用空格隔开的3个正整数,一次表示参数p1,p2,p3。
      第2行为一行字符串,仅由数字、小写字母和减号“-”组成。行首和行末均无空格。
    输出格式
      输出只有一行,为展开后的字符串。
    输入输出样例1:
    输入
    1 2 1
    abcs-w1234-9s-4zz
    输出
    abcsttuuvvw1234556677889s-4zz
    输入输出样例2:
    输入
    2 3 2
    a-d-d
    输出
    aCCCBBBd-d
    输入输出样例3
    输入
    3 4 2
    di-jkstra2-6
    输出
    dijkstra2
    ***********6
    数据规模和约定
      40%的数据满足:字符串长度不超过5
      100%的数据满足:1<=p1<=3,1<=p2<=8,1<=p3<=2。字符串长度不超过100

    分析:
    纯粹的耗时的题目,注意题目的要求,注意边界特殊处理如:第一个和最后一个字符,连续的‘-’等。
    (小编这里是把各种情况直接放在了一起,是为了更加节省内存)

    import java.util.ArrayList;
    import java.util.Scanner;
    
    public class Main{
    	public static void main(String[] args) {
    		ArrayList <String> list = new ArrayList<String>();
    		Scanner sc = new Scanner(System.in);
    		int p1 = sc.nextInt();
    		int p2 = sc.nextInt();
    		int p3 = sc.nextInt();
    		
    		String s = sc.next();
    		String str = "";
    		char [] shu = s.toCharArray();
    		
    		for (int i = 0; i < shu.length; i++) {
    			if(shu[i]=='-'){
    				if(shu[i-1]>='0' && shu[i+1]<='9'  || shu[i-1]>='a' && shu[i+1]<='z') {
    					for (char j = (char) (shu[i-1]+1); j < shu[i+1]; j++) {
    						for (int j2 = 0; j2 < p2; j2++) {//p2处理
    							str+=j;
    						}
    						
    					}
    					if(p3==2) {
    						for (char j =  (char) (shu[i+1]-1); j >shu[i-1]; j--) {
    							for (int j2 = 0; j2 < p2; j2++) {//p2处理
    								str+=j;
    							}
    							
    						}
    						
    					}
    					
    					
    					
    					//p1处理
    					if(p1==2) {
    						str = str.toUpperCase();
    					}
    					if(p1==3) {
    						int n = str.length();
    						str="";
    						for (int j = 0; j < n; j++) {
    							str+="*";
    						}
    					}
    					
    					
    					list.add(str);
    					str="";
    				}
    			}
    		}
    		int count = 0;
    		for (int i = 0; i < shu.length; i++) {
    			if(shu[i]=='-') {
    				if(shu[i-1]<'9' && shu[i+1]>'a' || shu[i-1]>'a' && shu[i+1]<'9') {
    					System.out.print('-');
    					
    				}
    				else {
    					System.out.print(list.get(0));
    				}
    			}
    			else {
    				System.out.print(shu[i]);
    			}
    			count++;
    		}
    		
    		
    		
    		
    	}}
    
    
    
    
    展开全文
  • 在初赛普及组的“阅读程序写结果”的问题中,我们曾给出一个字符串展开的例子:如果在输入的字符串中,含有类似于“d-h”或者“4-8”的字串,我们就把它当作一种简写,输出时,用连续递增的字母获数字串替代其中的...
     在初赛普及组的“阅读程序写结果”的问题中,我们曾给出一个字符串展开的例子:如果在输入的字符串中,含有类似于“d-h”或者“4-8”的字串,我们就把它当作一种简写,输出时,用连续递增的字母获数字串替代其中的减号,即,将上面两个子串分别输出为“defgh”和“45678”。在本题中,我们通过增加一些参数的设置,使字符串的展开更为灵活。具体约定如下:
      (1) 遇到下面的情况需要做字符串的展开:在输入的字符串中,出现了减号“-”,减号两侧同为小写字母或同为数字,且按照ASCII码的顺序,减号右边的字符严格大于左边的字符。
      (2) 参数p1:展开方式。p1=1时,对于字母子串,填充小写字母;p1=2时,对于字母子串,填充大写字母。这两种情况下数字子串的填充方式相同。p1=3时,不论是字母子串还是数字字串,都用与要填充的字母个数相同的星号“*”来填充。
      (3) 参数p2:填充字符的重复个数。p2=k表示同一个字符要连续填充k个。例如,当p2=3时,子串“d-h”应扩展为“deeefffgggh”。减号两边的字符不变。
      (4) 参数p3:是否改为逆序:p3=1表示维持原来顺序,p3=2表示采用逆序输出,注意这时候仍然不包括减号两端的字符。例如当p1=1、p2=2、p3=2时,子串“d-h”应扩展为“dggffeeh”。
      (5) 如果减号右边的字符恰好是左边字符的后继,只删除中间的减号,例如:“d-e”应输出为“de”,“3-4”应输出为“34”。如果减号右边的字符按照ASCII码的顺序小于或等于左边字符,输出时,要保留中间的减号,例如:“d-d”应输出为“d-d”,“3-1”应输出为“3-1”。
    输入格式
      输入包括两行:
      第1行为用空格隔开的3个正整数,一次表示参数p1,p2,p3。
      第2行为一行字符串,仅由数字、小写字母和减号“-”组成。行首和行末均无空格。
    输出格式
      输出只有一行,为展开后的字符串。
    输入输出样例1
    输入
    输出
    1 2 1
    abcs-w1234-9s-4zz
    abcsttuuvvw1234556677889s-4zz
    输入输出样例2
    输入
    输出
    2 3 2
    a-d-d
    aCCCBBBd-d
    输入输出样例3
    输入
    输出
    3 4 2
    di-jkstra2-6
    dijkstra2************6
    数据规模和约定
      40%的数据满足:字符串长度不超过5

      100%的数据满足:1<=p1<=3,1<=p2<=8,1<=p3<=2。字符串长度不超过100



    #include <stdio.h>  
    #include <string.h>  
    #define MAXSIZE 10000  
      
    char s[MAXSIZE];  
    char result[MAXSIZE];  
    int p, p1, p2, p3, len;  
      
      
    void operate(int i)  
    {  
        int j, k, disparity;  
          
        char insert;  
          
        if(p1 == 2 && 'a'<=s[i-1] && s[i-1]<='z'){  
            insert = s[i-1] - ('a' - 'A') + 1;  
        }else{  
            insert = s[i-1] + 1;  
        }  
        if(p1 == 3){  
            insert = '*';  
        }  
          
        disparity = s[i+1] - s[i-1];  
        if(insert == '*'){  
            for(i = 1; i < disparity; i ++){  
                for(j = 0; j < p2; j ++){  
                    result[p++] = insert;  
                }  
            }  
        }else{  
            if(p3 == 1){  
                for(i = 1; i < disparity; i ++, insert ++){  
                    for(j = 0; j < p2; j ++){  
                        result[p++] = insert;  
                    }  
                }  
            }  
            if(p3 == 2){  
                insert += disparity - 2;  
                for(i = 1; i < disparity; i ++, insert --){  
                    for(j = 0; j < p2; j ++){  
                        result[p++] = insert;  
                    }  
                }  
            }  
        }  
          
    }  
      
    int main()  
    {  
          
        int i;  
          
        scanf("%d%d%d\n%s", &p1, &p2, &p3, s);  
          
          
        len = strlen(s);  
        for(i = 0; i < len; i ++){  
              
            if(s[i] != '-' || !(('0'<=s[i-1] && s[i+1]<='9') ||   
                ('a'<=s[i-1] && s[i+1]<='z'))){  
                result[p++] = s[i];  
            }else{  
                  
                if(s[i+1] > s[i-1]){  
                    operate(i);  
                }else{  
                    result[p++] = s[i];  
                }  
            }  
        }  
          
        printf("%s", result);  
          
        return 0;     
    }  

    展开全文
  •  在初赛普及组的“阅读程序写结果”的问题中,我们曾给出一个字符串展开的例子:如果在输入的字符串中,含有类似于“d-h”或者“4-8”的字串,我们就把它当作一种简写,输出时,用连续递增的字母获数字串替代其中的...
  •  在本题中,我们通过增加一些参数的设置,使字符串展开更为灵活。具体约定如下:    (1) 遇到下面的情况需要做字符串展开:在输入的字符串中,出现了减号“-”,减号两侧同为小写字母或同为数字,且按照ASCII...
  • 注意当p1=2时,字母和数字的区别。推荐使用string,采用replace函数替换就行,char[]移动大量数据。 【AC代码】: #include #include #include #include #include using namespace std; #define MAX ...
  •  在初赛普及组的“阅读程序写结果”的问题中,我们曾给出一个字符串展开的例子:如果在输入的字符串中,含有类似于“d-h”或者“4-8”的字串,我们就把它当作一种简写,输出时,用连续递增的字母获数字串替代其中的...
  • 在初赛普及组的“阅读程序写结果”的问题中,我们曾给出一个字符串展开的例子:如果在输入的字符串中,含有类似于“d-h”或者“4-8”的字串,我们就把它当作一种简写,输出时,用连续递增的字母获数字串替代其中的...
  • 在初赛普及组的“阅读程序写结果”的问题中,我们曾给出一个字符串展开的例子:如果在输入的字符串中,含有类似于“d-h”或者“4-8”的字串,我们就把它当作一种简写,输出时,用连续递增的字母获数字串替代其中的...
  • 徐老师自己定义了1,2,3,4,5这5个参数分别指代不同的5种字符串操作,你需要根据传入的参数,按照徐老师的规定,对输入字符串进行格式转化。  徐老师指定的操作如下:  1 表示全部转化为大写字母输出,如abC 变成 ...
  •  在初赛普及组的“阅读程序写结果”的问题中,我们曾给出一个字符串展开的例子:如果在输入的字符串中,含有类似于“d-h”或者“4-8”的字串,我们就把它当作一种简写,输出时,用连续递增的字母获数字串替代其中的...
  • 就是模拟, 比赛的时候心态急躁,...2、第一个字符无论是什么都直接输出,不然后面判断时数组越界会WA。 3、养成数组清零的好习惯。 #include #include #include #include using namespace std; char
  •  在初赛普及组的“阅读程序写结果”的问题中,我们曾给出一个字符串展开的例子:如果在输入的字符串中,含有类似于“d-h”或者“4-8”的字串,我们就把它当作一种简写,输出时,用连续递增的字母获数字串替代其中的...
  • 问题描述:杨辉三角又称Pascal三角形,它的第i+1行是(a+b)i的展开式的系数。它的一个重要性质是:三角形中每个数字等于它两肩上的数字相加。 输入格式:输入一个数字n,代表杨辉三角形的行数 输出格式:输出三角形...
  • 蓝桥杯

    2018-03-19 21:11:45
    我们需要一个新的字符串比较函数compare(s1, s2). 对这个函数要求是: 1. 它返回一个整数,表示比较的结果。 2. 结果为正值,则前一个串大,为负值,后一个串大,否则,相同。 3. 结果的绝对值表示:在第几个字母处...
  • 蓝桥杯入门

    2019-01-29 21:29:45
     给定两个仅由大写字母或小写字母组成的字符串(长度介于1到10之间),它们之间的关 系是以下4中情况之一:   1:两个字符串长度不等。比如 Beijing 和 Hebei   2:两个字符串不仅长度相等,而且相应位置上的...
  • /*先把16进制化成二进制——从后往前展开 */ for(i=strlen(h)-1;i>=0;i--){ int v; if(h[i]>='0' && h[i]<='9') v=h[i]-'0'; else v=h[i]-'A'+10; for(int j=0;j<4;j++){ b[len++]=v%2+...
  • Python蓝桥杯

    2021-03-07 15:58:05
    Python蓝桥杯 文章目录Python蓝桥杯入门篇1.1 Fibonacci数列题入门训练 圆的面积1.3 入门训练 序列求和1.4 入门训练 A+B问题2.基础篇2.1 数列排序2.2 十六进制转八进制十六进制转十进制十进制转十六进制特殊回文数回...
  • Python解答蓝桥杯省赛真题之从入门到真题

    万次阅读 多人点赞 2019-12-21 10:07:37
    搜了很多历年蓝桥杯真题解答,大多都是Java,C++,C这些语言编写的代码解析。Python解析的几乎,甚至可以说没有。而当下Python又这么火热,蓝桥杯也出了Python组,所以打算写一个Python解答蓝桥杯真题的博客,供大家...

空空如也

空空如也

1 2 3 4 5 ... 14
收藏数 268
精华内容 107
关键字:

蓝桥杯字符串展开