1 条题解

  • 0
    @ 2025-4-14 18:43:47

    C++ :

    #include <stdio.h>
    #include <string.h>
    #include <ctype.h>
    char s[999], c;
    int i, j, k, p1, p2, p3;
    int main()
    {
    	scanf ("%d%d%d%s", &p1, &p2, &p3, s);
    	for (i = 0; i < strlen (s); ++i)
    		if (i && s[i] == '-' && s[i + 1] > s[i - 1] && isalnum (s[i - 1]) 
    		&& s[i + 1] - s[i - 1] < 26) {
    			if (s[i + 1] - s[i - 1] > 1) {
    				char a[999] = "";
    				j = 0;
    				for (k = s[i - 1] + 1; k < s[i + 1]; ++k) {
    					if (p1 == 1)
    						c = tolower (k);
    					else if (p1 == 2)
    						c = toupper (k);
    					else
    						c = '*';
    					memset (a + j, c, p2);
    					j += p2;
    				}
    				if (p3 == 1)
    					printf (a);
    				else
    					for (--j; j >= 0; --j)
    						putchar (a[j]);
    			}
    		}
    		else
    			putchar (s[i]);
    		return 0;
    }
    

    Pascal :

    var i,p1,p2,p3:longint; s,ss:ansistring;
    
    procedure num(a:longint);
    var x,j:longint; i:char;
    begin
    x:=ord(s[a+1])-ord(s[a-1]);
    if p1<>3 then begin
    if x>1 then if p3=1 then for i:=succ(s[a-1]) to pred(s[a+1]) do for j:=1 to p2 do ss:=ss+i
                     else for i:=pred(s[a+1]) downto succ(s[a-1]) do for j:=1 to p2 do ss:=ss+i;
    if x<=0 then ss:=ss+'-';
    if x=1 then exit;
                 end
    else begin
    if x>1 then for i:=succ(s[a-1]) to pred(s[a+1]) do for j:=1 to p2 do ss:=ss+'*';
    if x<=0 then ss:=ss+'-';
    if x=1 then exit;
         end;
    end;
    
    
    procedure let(a:longint);
    var x,j:longint; i:char;
    begin
    x:=ord(s[a+1])-ord(s[a-1]);
    if p1=1 then begin
    if x>1 then if p3=1 then for i:=succ(s[a-1]) to pred(s[a+1]) do for j:=1 to p2 do ss:=ss+i
                     else for i:=pred(s[a+1]) downto succ(s[a-1]) do for j:=1 to p2 do ss:=ss+i;
    if x<=0 then ss:=ss+'-';
    if x=1 then exit;
                 end
    else if p1=3 then begin
    if x>1 then for i:=succ(s[a-1]) to pred(s[a+1]) do for j:=1 to p2 do ss:=ss+'*';
    if x<=0 then ss:=ss+'-';
    if x=1 then exit;
                      end
    else if p1=2 then
    if x>1 then if p3=1 then for i:=succ(s[a-1]) to pred(s[a+1]) do for j:=1 to p2 do ss:=ss+chr(ord(i)-32)
                     else for i:=pred(s[a+1]) downto succ(s[a-1]) do for j:=1 to p2 do ss:=ss+chr(ord(i)-32);
    if x<=0 then ss:=ss+'-';
    if x=1 then exit;
    end;
    
    
    begin
    readln(p1,p2,p3);
    read(s);
    ss:='';
    ss:=ss+s[1];
    for i:=2 to length(s) do
        if (s[i]<>'-') then ss:=ss+s[i]
             else begin
                  if (s[i-1]>='0')and(s[i+1]>='0')and(s[i-1]<='9')and(s[i+1]<='9')then num(i) else
                  if (s[i-1]>='a')and(s[i+1]>='a')and(s[i-1]<='z')and(s[i+1]<='z')then let(i) else ss:=ss+'-';
       end;
    writeln(ss);
    end.
    
    
    • 1

    信息

    ID
    3215
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者