为什么这段代码计算错误?

Ama*_*ani 1 c++ string substring char c++11

在调试此代码时,我注意到代码中提到的 sum 值往往会给出错误的结果。我不明白为什么会发生这种情况。

我的程序采用一个字符串计算其子字符串并计算所有子字符串中存在的元音数量,最后的总和值是同时所有元音计数的总和

我已经尝试过通过代码进行调试,但无法理解代码有什么问题

#include <iostream>
using namespace std;

int main()
{
long long int t,j,n,l,count=0,sum=0;
cin>>t;
string s;
//char i;
while(t>0)
{
    l=0;
    sum=0;
   count=0;
    cin  >>  s;
    n= s.length();
    for(j=0;j<n;j++)
    {
        if(s[j]=='a' || s[j]=='e' || s[j]=='i' || s[j]=='o' || s[j]=='u' || s[j]=='A'|| s[j]=='E' || s[j]=='I' ||s[j]=='O' || s[j]=='U')
        {
              count++;
             l=j;

             cout<<"l="<<j<<endl;
             cout<<"j="<<j<<endl;
             cout<<"n="<<n<<endl;
             cout<<"n-1="<<n-1<<endl;
             cout<<"j+1="<<j+1<<endl;

            sum=sum+((n-l)*(j+1));

            cout<<"SUM is="<<sum << endl;
        }
    }
     if(l==0)
        {
            sum=0;
        }
        cout<<"Second part Sum="<<endl;
    cout<<sum<<endl;
    t--;
}

}
Run Code Online (Sandbox Code Playgroud)

程序编译并运行,没有错误消息。但是,由于 sum 的计算不正确,存在逻辑错误......在此输入图像描述

为什么 sum = 20 ?应该是 25 或 35...

为了澄清起见,这是此解决方案的问题陈述: https://www.hackerearth.com/practice/basic-programming/complexity-analysis/time-and-space-complexity/practice-problems/algorithm/vowel-game- f1a1047c/

Sha*_*man 5

您的程序给出的输出是正确的。为什么你认为应该是 25/30?

你写了

sum=sum+((n-l)*(j+1));
Run Code Online (Sandbox Code Playgroud)

当 j = 1 时 l=j=1 所以 (nl) (j+1)=(6-1) (1+1)=5*2=10

所以总和=总和+(nl)*(j+1)=0+10=10

当 j=4 时 l=j=4

所以 (nl) (j+1)=(6-4) (4+1)=2*5=10

所以总和=总和+(nl)*(j+1)=10+10=20

我认为你搞乱了 l(alphabet) 和 1。如果你写了(n-l)*(j+1)那么它会 = 5*5=25 结果最终总和=10+25=35