题目大意
题目链接
给你一个数,看是否能够把这个数拆分成多份,使得每份的和都相等。
分析
首先读题就要仔细,题目说的是拆分,所以肯定不能改变各数之间的相对位置。其次就是题目中没有说到底是拆分成多少份。再仔细读一遍题目就会发现这个整数最多是100位,每位最大是9。所以每份的和最大就是999(相对较小)。所以我可以从1到999去枚举每种可能的和。所以对于每一种可能,再从头到尾的遍历字符串,求字符串的和cns,只要等于cns等于枚举的和,那么就让cns=0,如果最后cns等于0,那么枚举的这个值就满足条件。
代码
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(int argc, char const *argv[])
{
string s;
int n;
scanf("%d",&n);
cin>>s;
int len=s.size();
bool cmp=false;
for (int i = 1; i <1000; ++i)
{
int cns=0;
int flag=0;
int cnt=0;
for(int j=0;j<len;j++)
{
cns=cns+s[j]-48;
if(cns>i)
{
flag=1;
break;
}
else if(cns==i)
{
cnt++;
cns=0;
}
}
if(cns==0&&flag==0&&cnt>1)
{
cmp=true;
break;
}
}
if(cmp)
printf("Yes\n");
else
printf("No\n");
return 0;
}
总结
仔细读题。
网友评论