注意加特判
by zzhhyy1234 @ 2024-08-24 09:16:26
有的开头或结尾有“-”
by zzhhyy1234 @ 2024-08-24 09:17:20
有的有两个“-”连一块的
by zzhhyy1234 @ 2024-08-24 09:18:15
上面两种情况都直接把“-”输出
by zzhhyy1234 @ 2024-08-24 09:18:55
[@LabmemNo_012LzTopic](https://www.luogu.com.cn/user/1148832)
by zzhhyy1234 @ 2024-08-24 09:20:04
```cpp
#include<stdio.h>
#include<string.h>
#include<math.h>
int pd(char x, char y)//是否为同一类型
{
if (x >= 'a' && x <= 'z')
{
if (y >= 'a' && y <= 'z')
{
return 1;
}
else return 0;
}
else
{
if (y >= '0' && y <= '9')
{
return 1;
}
else return 0;
}
}
int main()
{
int p1, p2, p3;
char s[105];
scanf("%d%d%d", &p1, &p2, &p3);
getchar();
scanf("%s", s);
int len, k;
len = strlen(s);
for (int i = 0; i < len; i++)
{
if (s[i] == '-')
{
if(s[i-1]=='-'||s[i+1]=='-'||i==l-1||i==0)
cout<<'-';
if (pd(s[i - 1], s[i + 1]));//是否为同一类型
else
{
printf("-");//不是就保留’-’
continue;
}
k = s[i + 1] - s[i - 1];
if (k == 1)continue;//减号右边的字符恰好是左边字符的后继,只删除中间的减号
if (k < 1)//减号右边的字符严格大于左边的字符(不满足)
{
printf("-");
continue;
}
else//减号右边的字符严格大于左边的字符
{
if (p3 == 1)//顺序
{
for (int j = 1; j < k; j++)
{
for (int z = 1; z <= p2; z++)//一个字符打印几次
{
if (s[i - 1] >= 'a' && s[i - 1] <= 'z')//字母
{
if (p1 == 3)printf("*");
else if (p1 == 1)//打印小写字母
{
printf("%c", s[i - 1] + j);
}
else//打印大写字母
{
printf("%c", s[i - 1] + j - 32);
}
}
else//数字
{
printf("%c", s[i - 1] + j);
}
}
}
}
else//逆序
{
for (int j = 1; j < k; j++)
{
for (int z = 1; z <= p2; z++)
{
if (s[i - 1] >= 'a' && s[i - 1] <= 'z')
{
if (p1 == 3)printf("*");
else if (p1 == 1)
{
printf("%c", s[i + 1] - j);
}
else
{
printf("%c", s[i + 1] - j - 32);
}
}
else
{
printf("%c", s[i + 1] - j);
}
}
}
}
}
}
else
{
printf("%c", s[i]);
}
}
return 0;
}
```
by zzhhyy1234 @ 2024-08-24 09:22:09
```cpp
#include<stdio.h>
#include<string.h>
#include<math.h>
int pd(char x, char y)//是否为同一类型
{
if (x >= 'a' && x <= 'z')
{
if (y >= 'a' && y <= 'z')
{
return 1;
}
else return 0;
}
else
{
if (y >= '0' && y <= '9')
{
return 1;
}
else return 0;
}
}
int main()
{
int p1, p2, p3;
char s[105];
scanf("%d%d%d", &p1, &p2, &p3);
getchar();
scanf("%s", s);
int len, k;
len = strlen(s);
for (int i = 0; i < len; i++)
{
if (s[i] == '-')
{
if(s[i-1]=='-'||s[i+1]=='-'||i==len-1||i==0) //我改的
cout<<'-';
if (pd(s[i - 1], s[i + 1]));//是否为同一类型
else
{
printf("-");//不是就保留’-’
continue;
}
k = s[i + 1] - s[i - 1];
if (k == 1)continue;//减号右边的字符恰好是左边字符的后继,只删除中间的减号
if (k < 1)//减号右边的字符严格大于左边的字符(不满足)
{
printf("-");
continue;
}
else//减号右边的字符严格大于左边的字符
{
if (p3 == 1)//顺序
{
for (int j = 1; j < k; j++)
{
for (int z = 1; z <= p2; z++)//一个字符打印几次
{
if (s[i - 1] >= 'a' && s[i - 1] <= 'z')//字母
{
if (p1 == 3)printf("*");
else if (p1 == 1)//打印小写字母
{
printf("%c", s[i - 1] + j);
}
else//打印大写字母
{
printf("%c", s[i - 1] + j - 32);
}
}
else//数字
{
printf("%c", s[i - 1] + j);
}
}
}
}
else//逆序
{
for (int j = 1; j < k; j++)
{
for (int z = 1; z <= p2; z++)
{
if (s[i - 1] >= 'a' && s[i - 1] <= 'z')
{
if (p1 == 3)printf("*");
else if (p1 == 1)
{
printf("%c", s[i + 1] - j);
}
else
{
printf("%c", s[i + 1] - j - 32);
}
}
else
{
printf("%c", s[i + 1] - j);
}
}
}
}
}
}
else
{
printf("%c", s[i]);
}
}
return 0;
}
```
by zzhhyy1234 @ 2024-08-24 09:23:18
上面那个没过编译 $[doge]$
by zzhhyy1234 @ 2024-08-24 09:24:02
```cpp
#include<stdio.h>
#include<string.h>
#include<math.h>
int pd(char x, char y)//是否为同一类型
{
if (x >= 'a' && x <= 'z')
{
if (y >= 'a' && y <= 'z')
{
return 1;
}
else return 0;
}
else
{
if (y >= '0' && y <= '9')
{
return 1;
}
else return 0;
}
}
int main()
{
int p1, p2, p3;
char s[105];
scanf("%d%d%d", &p1, &p2, &p3);
getchar();
scanf("%s", s);
int len, k;
len = strlen(s);
for (int i = 0; i < len; i++)
{
if (s[i] == '-')
{
if(s[i-1]=='-'||s[i+1]=='-'||i==len-1||i==0) //改的
printf("-");
if (pd(s[i - 1], s[i + 1]));//是否为同一类型
else
{
printf("-");//不是就保留’-’
continue;
}
k = s[i + 1] - s[i - 1];
if (k == 1)continue;//减号右边的字符恰好是左边字符的后继,只删除中间的减号
if (k < 1)//减号右边的字符严格大于左边的字符(不满足)
{
printf("-");
continue;
}
else//减号右边的字符严格大于左边的字符
{
if (p3 == 1)//顺序
{
for (int j = 1; j < k; j++)
{
for (int z = 1; z <= p2; z++)//一个字符打印几次
{
if (s[i - 1] >= 'a' && s[i - 1] <= 'z')//字母
{
if (p1 == 3)printf("*");
else if (p1 == 1)//打印小写字母
{
printf("%c", s[i - 1] + j);
}
else//打印大写字母
{
printf("%c", s[i - 1] + j - 32);
}
}
else//数字
{
printf("%c", s[i - 1] + j);
}
}
}
}
else//逆序
{
for (int j = 1; j < k; j++)
{
for (int z = 1; z <= p2; z++)
{
if (s[i - 1] >= 'a' && s[i - 1] <= 'z')
{
if (p1 == 3)printf("*");
else if (p1 == 1)
{
printf("%c", s[i + 1] - j);
}
else
{
printf("%c", s[i + 1] - j - 32);
}
}
else
{
printf("%c", s[i + 1] - j);
}
}
}
}
}
}
else
{
printf("%c", s[i]);
}
}
return 0;
}
```
by zzhhyy1234 @ 2024-08-24 09:25:06
车祸现场:前两个都没过编译
by zzhhyy1234 @ 2024-08-24 09:25:40