在C ++中最小的数组元素之后求和

时间:2015-10-23 19:13:59

标签: c++ arrays sum

int modulusumma(int mas[], int skaits) { //1b)Elementu summa pec skaitla 0
 int i,a,b;

for(i=0; i<skaits; i++)
        mas[i]=abs(mas[i]);
int smallest = INT_MAX;
 for (i=0; i<skaits; i++){
if (mas[i] < smallest) {
    smallest = mas[i];
}

b=0; 
 for (i=0; i<skaits; i++)
if(mas[i]==smallest)
a=i;
if(a!=i)
for (i=a; i<skaits; i++)
b+=mas[i];
return b;

这个东西得到最小数字之后的总和,但是它包括它并且还计算前一个,例如55555555555555551111(具有20个整数的数组)的总和将是9.我该怎么做才能解决这个问题? 对不起,对于我的英语,我需要制作20个整数的数组,并获得最低值之后的元素总和。

1 个答案:

答案 0 :(得分:0)

您可能希望找到最小元素的 index ,例如(未经测试,修复了一些错误的错误):

size_t argmin( const size_t n, const int a[n] )
{
  size_t m = 0;

  for ( size_t i = 1; i < n; ++i )
    if ( a[i] < a[m] )
      m = i;

  return m;
}

long sum_after_min( const size_t n, const int a[n] )
{
  const size_t m = argmin( n, a );
  long sum = 0;

  if ( SIZE_MAX == m )
    return 0; // Or else m+1 would underflow!

  for ( size_t i = m + 1; i < n; ++i )
    sum += a[i];

  return sum;
}

另外,请务必说明如果最小参数是重复的话会发生什么。