Сумма элементов массива с шагом 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 шт):
Что-то вы никак с заданиями не справляетесь. Где мои хорошие оценки? :)
Просто читаем и сразу накапливаем суммы в массив 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]);
}
}
правильное решение получается вот такое:
#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;
}