为什么这段代码会做错误的计算?
Why this code is doing wrong calculations?
在调试这段代码时,我注意到代码中提到的 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/
你的程序给出的输出是正确的。为什么你认为它应该是 25/30?
你写了
sum=sum+((n-l)*(j+1));
当 j = 1 时 l=j=1
所以 (n-l)(j+1)=(6-1)(1+1)=5*2=10
所以总和=总和+(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
在调试这段代码时,我注意到代码中提到的 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/
你的程序给出的输出是正确的。为什么你认为它应该是 25/30?
你写了
sum=sum+((n-l)*(j+1));
当 j = 1 时 l=j=1 所以 (n-l)(j+1)=(6-1)(1+1)=5*2=10
所以总和=总和+(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