题解 CF25B 【Phone numbers】

一道字符串模拟题

首先我们知道

偶数+偶数=偶数

偶数+奇数=奇数

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

  • (Nle3)时,直接输出字符串即可

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

  • (N=2k+1) ((kge2))时,可以把(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;
}

原文地址:https://www.cnblogs.com/WKAHPM/p/11628903.html