题目1
题解
傻瓜方案:
一趟遍历,符合条件的累加起来,时间复杂度为O(N)。
#include <iostream>
int main(){
int sum = 0;
for(int i=1;i<1000;i++){
if(i % 3 == 0 || i % 5 == 0){
sum += i;
}
}
std::cout << sum << std::endl;
return 0;
}
优化版本:
直接利用等差数列求和。 (a + b) * n / 2。3的所有倍数和 + 5的所有倍数和 - 15的所有倍数和。时间复杂度为O(1)。
#include <iostream>
int main(){
int sum = 0;
int t3 = (3 + 999) * 333 / 2;
int t5 = (5 + 995) * 199 / 2;
int t15 = (15 + 990) * 66 / 2;
std::cout << t3 + t5 - t15 << std::endl;
return 0;
}