题解 | #[NOIP2007]字符串的展开#

[NOIP2007]字符串的展开

https://ac.nowcoder.com/acm/problem/16644

本题所采用的思想并不复杂,只是情况较多,尤其是注意字符串的开始和结尾都是'-'的情况

#include <iostream>
using namespace std;
#include <ctype.h>

void Print_Char(char left, char right, int p1, int p2, int p3)
{
    //如果减号右边的字符恰好是左边字符的后继,只删除中间的减号
    if(right-left == 1) printf("");
    else if(right <= left) printf("-");
    else
    {
        char temp;
        //正序输出
        if(1 == p3)
        {
            for(temp = left+1; temp < right; temp++)
            {
                for(int i = 0; i < p2; i++)
                {
                    if(1 == p1) printf("%c", tolower(temp));
                    else if(2 == p1) printf("%c", toupper(temp));
                    else if(3 == p1) printf("*");
                }
            }
        }
        else if(2 == p3) //逆序输出
        {
            for(temp = right-1; temp > left; temp--)
            {
                for(int i = 0; i < p2; i++)
                {
                    if(1 == p1) printf("%c", tolower(temp));
                    else if(2 == p1) printf("%c", toupper(temp));
                    else if(3 == p1) printf("*");
                }
            }
        }
    }
}

int main(void)
{
    char str[105];
    int p1, p2, p3;
    scanf("%d%d%d", &p1, &p2, &p3);
    scanf("%s", str);
    int i, j;

    //排除开头都是-的情况
    for(j = 0; str[j] != '\0'; j++)
    {
        if(str[j] == '-') printf("-");
        else break;
    }

    //遍历字符串
    for(i = j; str[i] != '\0'; i++)
    {
        if(str[i] != '-')
            printf("%c", str[i]);
        else if(str[i] == '-' && str[i+1] == '\0') //如果最后一项是-,则输出-
            printf("-");
        else if(abs(str[i+1]-str[i-1]) > 26)
            printf("-");
        else
            Print_Char(str[i-1], str[i+1], p1, p2, p3);
    }
    return 0;
}
全部评论

相关推荐

06-11 15:52
东南大学 C++
问了一下hr,这个回答是G了吗
椛鸣:我遇到过 我给你翻一下 对不起 我之前把你当备胎了 现在我人已经招满了 ***吧
点赞 评论 收藏
分享
墨西哥大灰狼:如果你的校友卤馆还在的话,他肯定会给你建议的,可是卤馆注销了@ 程序员卤馆
点赞 评论 收藏
分享
06-04 20:17
门头沟学院 Java
牛客713608542号:有的,我今天刚面了一个小厂,他们说刚好有缺人,就放出来了,成都的旅鸽,hxd不如去试试,但是是线下哇,不知道他们支不支持线上,如果有面记得多复习一下sql,我死在这一块上了
点赞 评论 收藏
分享
评论
3
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务