【问题标题】:Why this code is doing wrong calculations?为什么这段代码做错误的计算?
【发布时间】:2019-12-05 08:51:54
【问题描述】:

在调试这段代码时,我注意到代码中提到的 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--;
}

}

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

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

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

【问题讨论】:

  • 你的程序到底应该做什么?
  • @ManLaw 我的程序接受一个字符串,计算它的子字符串并计算所有子字符串中存在的元音数量,最后一个总和值是同时所有元音计数的总和,它工作正常但我对 sum value 的计算有疑问,应该是 25 或 35 而不是 20
  • edit在您的问题中解释这一点。
  • 可能是因为您将 sum 设置为 0 jndide 您的循环while (t &gt; 0)?还是if (l == 0) 位?更一般地说,如果您在变量名称上投入更多精力(即更多字母,例如 inStr 而不是 s,我不知道 t 或 l 是什么意思)并正确缩进,可能更容易理解。

标签: string c++11 char substring findbugs


【解决方案1】:

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

你写的

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

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

所以 sum = sum+(n-l)*(j+1)=0+10=10

当 j=4 时 l=j=4

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

所以 sum = sum+(n-l)*(j+1)=10+10=20

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

【讨论】:

  • 你说的非常对!,我认为我把字母表弄乱了,这就是我无法发现差异的原因,谢谢 :)
猜你喜欢
  • 2015-07-07
  • 2022-06-28
  • 1970-01-01
  • 2016-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-25
  • 1970-01-01
相关资源
最近更新 更多