该程序接收一个整数数组。必须在每一行上输出数组的第i个元素的和。例如,对于这样的数组{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
,答案将是这样的:
55 //1+2+3+4+5+6+7+8+9+10
30 //2+4+6+8+10
18 //3+6+9
12 //4+8
15 //5+10
6 //6
7 //7
8 //8
9 //9
10 //10
这是解决此问题的代码:
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
int main(void) {
int N, i, j, S;
scanf("%d",&N); //length of array
int a[N];
for(i = 0; i < N; ++i) scanf("%d",&a[i]);
for(i = 1; i <= N; ++i) {
S = 0;
for(j = 0; j < N; ++j)
S += !((j+1)%i) ? a[j] : 0;
printf("%d\n",S);
}
return 0;
}
我的问题是我的算法不够快。在大数据上,其速度非常低。我试图提出一种算法,该算法将首先递归地计算小数,然后再计算其他数。但是我没有实现它。
请给我一个更优雅的选择来解决这个问题。
简单的修改有助于避免检查所有索引:
for(j = i - 1; j < N; j += i)
S += a[j];
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句