给你一个长度为50的数字串,问你有多少个子序列构成的数字可以被3整除 答案对1e9+7取模
#include<iostream>
using namespace std;
const long k=1e9+7;
char num[51];
int number[51];
int sta[51][51];
unsigned long long ans;
int mods(int supply)
{
if(supply%3==0)return 0;
if(supply%3==1)return 1;
if(supply%3==2)return 2;
}
int main()
{
int len=1;
while(cin>>num[len])
{
len++;
}
len--;
for(int i=1;i<=len;i++)
{
number[i]=num[i]-'0';
}
sta[1][mods(number[1])]++;
ans+=sta[1][0]%k;
for(int i=2;i<=len;i++)
{
sta[i][mods(number[i])]++;
for(int j=0;j<=2;j++)
{
if(mods(number[i]+j)!=0)
sta[i][mods(number[i]+j)]+=sta[i-1][mods(number[i]+j)]+sta[i-1][j];
else sta[i][mods(number[i]+j)]+=sta[i-1][j];
}
ans+=sta[i][0]%k;
}
cout<<ans;
return 0;
}
有很多样例我输出的答案比他给的少输出了1,我自己没看出来哪里有错,请问怎么找出来