这道题的题目和代码都很长,但是细节满满,值得一写
1001-[NOIP2007]字符串的展开_2021秋季算法入门班第一章习题:模拟、枚举、贪心 (nowcoder.com)
代码
🚥🚥🚥🚥🚥🚥
🏳️🌈🏳️🌈🏳️🌈代码的意思是边输入边输出
#include<stdio.h> #include<string.h> int type(char ch){//这一部分很妙 if(ch>='a' && ch<='z') return 1; if(ch>='A' && ch<='Z') return 2; if(ch>='0' && ch<='9') return 3; return 4; } int main(){ int p1,p2,p3; scanf("%d %d %d",&p1,&p2,&p3); char str[105]; scanf("%s",str); int len = strlen(str); for(int i = 0;i<len;i++){ if(str[i+1] == '-' && str[i+2]>str[i] &&(type(str[i+2])==type(str[i]))){ putchar(str[i]); if(p3 == 1){ for(int j=str[i]+1;j<str[i+2];j++){ for(int k = 0;k<p2;k++){ if(p1 == 1){ if(type(j) == 2) putchar(j+32); else putchar(j); }else if(p1==2){ if(type(j) == 1) putchar(j-32); else putchar(j); }else{ putchar('*'); } } } }else{ for(int j=str[i+2]-1;j>str[i];j--){ for(int k = 0;k<p2;k++){ if(p1 == 1){ if(type(j) == 2) putchar(j+32); else putchar(j); }else if(p1==2){ if(type(j) == 1) putchar(j-32); else putchar(j); }else{ putchar('*'); } } } } i+=1; } else//千万别忘了这一行代码 putchar(str[i]); } return 0; }
Code over!