题解 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;
}

posted @ 2019-10-06 22:58  zyx_00  阅读(100)  评论(0编辑  收藏  举报