即使在函数的第一个和第二个循环之间显示cout语句的输出,也不显示函数的第二个循环的任何输出。输入3 4 8 5作为cin。我需要得分为0 5 1.总得分为6。
代码:
#include <bits/stdc++.h>
#include <iostream>
#include <vector>
using namespace std;
long getMaxScore(vector < long > a){
// Complete this function
long runningSum = 0;
int n = a.size();
vector<long> scores(n);
int j=0;
long totalScore;
for(int i = 0; i < n;)
{
scores[j] = runningSum%a[n-1];
runningSum = runningSum + a[n-1];
n--;
j++;
}
cout<<scores[0]<<endl;
cout<<scores[1]<<endl;
cout<<scores[2]<<endl;
for(long k=0; k<n; k++)
{
totalScore = 0;
totalScore+=scores[k];
cout<<totalScore<<endl;
}
//return totalScore;}
int main() {
int n;
cin >> n;
vector<long> a(n);
for(int a_i = 0; a_i < n; a_i++){
cin >> a[a_i];
}
long maxScore = getMaxScore(a);
return 0;}
答案 0 :(得分:0)
<强>问题强>
循环
for(int i = 0; i < n;)
{
scores[j] = runningSum%a[n-1];
runningSum = runningSum + a[n-1];
n--;
j++;
}
在n
等于零时结束。
因此,当程序遇到循环时
for(long k=0; k<n; k++)
{
totalScore = 0;
totalScore+=scores[k];
cout<<totalScore<<endl;
}
由于k < n
为假,所以在循环内部没有任何内容。
<强>解决方案强>
我建议在第二个循环之前添加一行来重置n
的值。
n = a.size();
for(long k=0; k<n; k++)
{
...
}
移动线
totalScore = 0;
在循环之外积累分数。
totalScore = 0;
for(long k=0; k<n; k++)
{
totalScore += scores[k];
cout << totalScore << endl;
}