敢不敢挑战这道《简单题》

简介: 这道题的题目和代码都很长,但是细节满满,值得一写

这道题的题目和代码都很长,但是细节满满,值得一写

1001-[NOIP2007]字符串的展开_2021秋季算法入门班第一章习题:模拟、枚举、贪心 (nowcoder.com)

1.1.png

1.2.png 代码

🚥🚥🚥🚥🚥🚥

🏳️‍🌈🏳️‍🌈🏳️‍🌈代码的意思是边输入边输出

#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!

相关文章
|
19天前
|
索引
日拱一卒,月进一步(11)
414. 第三大的数 - 力扣(LeetCode)
18 1
|
19天前
日拱一卒,月进一步(14)
561. 数组拆分 - 力扣(LeetCode) 快排并从第一位开始隔位取数字
16 1
|
19天前
日拱一卒,月进一步(4)
66. 加一 - 力扣(LeetCode) 思路: 数字加法应该从前向后遍历,因此我们应该从数字末尾从后向前遍历。如果数字不为9,则直接在末尾+1。如果末尾为9,那么将其变为0,并且在下一位+1。如果一直遍历都为1,那么在数组第0位插入1。
15 1
|
19天前
|
算法
日拱一卒,月进一步(8)
136. 只出现一次的数字 - 力扣(LeetCode) 这个题目一出现,我就立马有了思路。其实就是让每个数字互相异或,最后得出的数字就是只出现一次的数字。
19 1
|
19天前
|
存储 索引
日拱一卒,月进一步(1)
思路2: 哈希表(暂时还没有学,所以先开个坑位,以后来填补)
16 1
|
19天前
日拱一卒,月进一步(13)
500. 键盘行 - 力扣(LeetCode) 好难啊!!!
18 1
|
19天前
日拱一卒,月进一步(15)
598. 区间加法 II - 力扣(LeetCode) 首先明白题目的含义:mn表示的是一个矩阵,初始化为0。再依次在满足条件的矩形内+1,最后找出最大数字的个数。我们只需要找到最小的长和宽即可。
26 1
|
19天前
|
安全 Java 索引
如何克服Leetcode做题的困境
如何克服Leetcode做题的困境
30 0
四道好题分享(看似简单,但是棘手)
四道好题分享(看似简单,但是棘手)
73 0
|
算法 程序员
【算法集训专题攻克篇】第二十篇之二叉搜索树
【算法集训专题攻克篇】第二十篇之二叉搜索树
【算法集训专题攻克篇】第二十篇之二叉搜索树