2015-05-03 3 views
0

Итак, у меня есть массив, такой как {1, 4, 2, 3, 5, 3, 7}, и я должен создать новый массив, содержащий суммы каждого из трех последовательных элементов, таких как {7, 9, 10, 11, 15}. До сих пор я здесь, и я не знаю, что я делаю неправильно.Групповая сумма n последовательных чисел массива

#include <iostream> 
#include <conio.h> 

using namespace std; 

int a[] = {1, 1, 2, 3, 5, 3, 7}; 
int lung = sizeof(a)/sizeof(a[0]); 
int *l = new int[10]; 

int calc(int *a, int m) 
{ 
    int sum = 0; 
    int stmax = (lung - m) - 1; 
    for(int st=0;st <= stmax; st++) 
    { 
     for(int i = 0; i < m; i++) 
     { 
      sum = sum + a[st+i]; 
     } 
     l[st] = sum; 
    } 
    return 0; 
} 

void main() 
{ 
    int a[] = {1, 1, 2, 3, 5, 3, 7}; 
    cout << calc(a, 3)<< endl; 
    for (int i = 0; i < lung; i++) 
    { 
     cout << l[i] << " | "; 
    } 
    _getch(); 
} 

ответ

0

вы должны установить sum=0; после каждой итерации

for(int st=0;st <= stmax; st++) 
    { 
     sum=0; 
     for(int i = 0; i < m; i++) 
     { 
      sum = sum + a[st+i]; 
     } 

     l[st] = sum; 


    } 

, а также вы должны объявить int stmax = (lung - m); //ommit -1

и в функции main печати массива до stmax

for (int i = 0; i <= stmax; i++) 
    { 
     cout << l[i] << " | "; 
    } 
+0

Спасибо, я понял, что в тот день мне пришлось обновить сумму. –

0

Я wou ld сделать это вот так:

#include <iostream> 
#include <conio.h> 

using namespace std; 

int a[] = { 1,4,2,3,5,3,7}; 
int lung = sizeof(a)/sizeof(a[0]); 

int *l = new int[10]; 

void calc(int* a, int m){ 
    a += 1; // Increment pointer 
    for (int st = 0; st <m; st++){ 
     l[st] = a[st-1]+a[st]+a[st+1]; 
    } 
} 

int main(){ 
    calc(a, lung-2); 
    for (auto i = 0; i < lung-2; i++){ 
     std::cout << l[i] << " "; 
    } 
} 
Смежные вопросы