Сумма элементов массива с шагом k

Дан массив из ? чисел ?1, ?2, . . ., ?? . Требуется вывести ? чисел ?? (? = 1, . . ., ?), где ?? — сумма элементов массива с шагом ?: Т.е. ?1 равняется сумме всех элементов массива, ?2 равняется сумме каждого второго элемента массива, ?3 равняется сумме каждого третьего элемента и т.д. В первой строке записано целое число ? (1 <= ? <= 10^5). Во второй строке через пробел записано ? целых чисел ?? (1 <= ?? <= 10^4). Выведите ? строк: в ?-й строке выведите значение ??. Мой код, в принципе, почти верно построен, но я не могу понять, почему он считает значения между t1 и tk неверно:

#include<stdio.h>
int main(){
    int N, k, t, sigma;
    scanf("%d", &N);
    int a[10000];
    for (int i=0; i<N; i++){
        scanf("%d", &a[i]);
    }
    for(int i=0; i<N; i++){
        for(k=0; k<N; k++){
            sigma+=a[i+k];
        }
    printf("%d\n", sigma);
    sigma=0;
    }
}

Подскажите, что исправить, пожалуйста :) (Пример: при N=6 и вводе 4 3 5 1 2 9 на выходе должно быть 24 13 14 1 2 9(в столбик))


Ответы (2 шт):

Автор решения: Mikhailo

Что-то вы никак с заданиями не справляетесь. Где мои хорошие оценки? :)

Просто читаем и сразу накапливаем суммы в массив t. Его инициализировать не надо - он глобальный.

#include<stdio.h>

int t[100001];

int main() {
    int N, a;
    scanf("%d", &N);

    for (int i = 1; i <= N; i++) {
        scanf("%d", &a);

        for (int j = 1; j <= N; ++j) {
            if (i % j == 0) t[j] += a;
            }
        }

    for (int i = 1; i <= N; i++) {
        printf("%d\n", t[i]);
        }
    }
→ Ссылка
Автор решения: A_Hatake

правильное решение получается вот такое:

#include<stdio.h>
int main(){
    int N, k, t;
    t=0;
    scanf("%d\n", &N);
    int a[100000];
    for (int i=0; i<N; i++){
        scanf("%d", &a[i]);
    }
    for(int i=1; i<=N; i++){
        for(k=i-1; k<N; k+=i){
            t+=a[k];
        }
    printf("%d\n", t);
    t=0;
    }
    return 0;
}
→ Ссылка