このコードをデバッグしているときに、コードで説明されている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--;
}
}
プログラムはコンパイルされ、エラーメッセージなしで実行されます。ただし、合計の計算が正しくないため、論理エラーが発生します...
なぜその合計= 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 So(nl)(j + 1)=(6-1)(1 + 1)= 5 * 2 = 10
したがって、sum = sum +(nl)*(j + 1)= 0 + 10 = 10
j = 4の場合、l = j = 4
したがって、(nl)(j + 1)=(6-4)(4 + 1)= 2 * 5 = 10
したがって、sum = sum +(nl)*(j + 1)= 10 + 10 = 20
私はあなたがl(アルファベット)と1をいじっていると思います。あなたが書いた場合(n-l)*(j+1)
、それは= 5 * 5 = 25の結果になります最終的な合計= 10 + 25 = 35
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加