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