2015-05-03 95 views
0

所以我有一個像{1, 4, 2, 3, 5, 3, 7}這樣的數組,我必須創建一個新的數組,其中包含每個3個連續元素的總和,如{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

你每次迭代

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

     l[st] = sum; 


    } 

後設置sum=0;,你也必須聲明int stmax = (lung - m); //ommit -1

,並在main功能打印陣列,直到stmax

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

謝謝,我想出了當天晚些時候我不得不更新總和。 –

0

我是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] << " "; 
    } 
}