1 c
列出给定数字以下3或5的倍数的数字之和.
这是我的代码,找不到任何不必要的东西.但hackerrank说它已经因超时而终止,时间限制是2秒,以给出预期的输出.输入第一行包含't',表示测试用例的数量.接下来是行,每行包含一个整数.
#include <stdio.h>
void calc(int a){
int sum = 0;
for(int a0=1; a0<a; a0++){
if(a0%3==0 || a0%5==0){
sum+=a0;
}
}
printf("%d", sum);
}
int main(){
int t;
scanf("%d",&t);
int arr[t];
for(int a0 = 0; a0 < t; a0++){
scanf("%d",&arr[a0]);
}
for(int b=0; b<t; b++){
calc(arr[b]);
printf("\n");
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输入
2
10
100
Run Code Online (Sandbox Code Playgroud)
输出必须是
23
2318
Run Code Online (Sandbox Code Playgroud)
如果我们列出10以下的所有自然数是3或5的倍数,那么这些倍数的总和是23.
您试图在给定数字下将所有3或5的倍数相加.你有没有尝试过如何在没有for循环的情况下做到这一点?我们试试吧.嗯,"3或5"需要考虑很多.让我们简化它,并尝试将99下的所有3的倍数相加:
3+6+9+12+15+...+99
你怎么能优化这个添加以避免for循环?(在继续阅读之前这样做)
现在,如果你知道如何在给定的n下加总3的所有倍数,那么这是否能给你一个方法来对给定n下的所有3 或 5的倍数求和?嗯,什么序列3,6,9,12之间重叠15,...,n和5,10,15 ...,N?也许如果你可以在n下加上3的倍数,并在n下加上5的倍数,那么你可以摆脱那个重叠?
好吧,假设我知道数字n下的3或5的倍数之和.这有助于我在数字n + 1下找到3或5的倍数之和吗?也许我知道calc(n)在calc(n-1)方面是什么.如果我能做到那么那将是伟大的,因为我可以保存 calc(n-1)而不是重新计算calc(n-1).要是...