2015-10-23 4 views
-2
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 целых чисел и получить сумму элементов, которые после младшего.Сумма после наименьшего элемента массива в C++

+2

Что? Пожалуйста, опишите, что вы пытаетесь сделать. – NathanOliver

ответ

0

Вы, вероятно, хотите, чтобы найти индекс наименьшего элемента, что-то вроде (непроверенных, неподвижных некоторых внедорожных по одному багов):

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; 
} 

Кроме того, не забудьте указать, что происходит, если наименьший аргумент - это дубликат.

Смежные вопросы