70分(5,7,9)求调!!!

P1098 [NOIP2007 提高组] 字符串的展开

注意加特判
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


| 下一页