题解 CF25B 【Phone numbers】

一道字符串模拟题

首先我们知道

偶数+偶数=偶数

偶数+奇数=奇数

然后我们就可以对\(N\)进行分类讨论:

  • \(N\le3\)时,直接输出字符串即可

  • \(N=2k\) \((k\ge2)\)时,可以把\(N\)拆分成若干个长度为2的字符串,在两个字符串之间添上-号

  • \(N=2k+1\) \((k\ge2)\)时,可以把\(N\)拆分成一个长度为3的字符串和若干个长度为2的字符串,在两个字符串之间添上-号

Code

#include<bits/stdc++.h>
using namespace std;
string s;
int sum;
int n;
int main()
{
    scanf("%d",&n);
    cin>>s;
    if(n<=3) //如果n<=3,直接输出
    {
        cout<<s;
        return 0;
    }
    if(n%2==0) //n为偶数则拆分成若干个长度为2的字符串
    {
        for(int i=0; i<n; i++)
        {
            sum++;
            printf("%c",s[i]);
            if(i==n-1) return 0;
            if(sum==2)
            {
                printf("-");
                sum=0;
            }
        }
    }
    else //n为奇数则拆分成一个长度为3的字符串和若干个长度为2的字符串
    {
        for(int i=0; i<3; i++)
        {
            printf("%c",s[i]);
        }
        printf("-");
        for(int i=3; i<n; i++)
        {
            sum++;
            printf("%c",s[i]);
            if(i==n-1) return 0;
            if(sum==2)
            {
                printf("-");
                sum=0;
            }
        }
    }
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/WKAHPM/p/11628903.html