小于1000的所有是3或5的倍数的数的和
sum of all the numbers below 1000 that are multiples of 3 or 5
Project Euler problem 1是:求小于1000的所有3或5的倍数的和
下面是我的程序,使用两个简单的函数计算出3的所有倍数和5的所有倍数的和,然后将它们相加:
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <vector>
#include <cmath>
using namespace std;
int threeSum( void );
int fiveSum( void );
int main( int argc, char** argv )
{
cout << "n The sum of all the natural numbers below 1000 that are multiples of 3 or 5 = n" << endl;
cout << threeSum() + fiveSum() << endl << endl;
system( "PAUSE" );
}
int threeSum( void )
{
int sumSoFar = 0;
for ( int i = 1 ; i < 1000 ; i++ )
{
if ( i % 3 == 0 )
sumSoFar = sumSoFar + i;
}
return sumSoFar;
}
int fiveSum( void )
{
int sumSoFar = 0;
for ( int i = 1 ; i < 1000 ; i++ )
{
if ( i % 5 == 0 )
sumSoFar = sumSoFar + i;
}
return sumSoFar;
}
产生266333
作为答案。这是正确的,还是我做错了什么,因为网站检查器说这是错误的答案!
另一种理解方式是:
答案=(3的倍数和)+(5的倍数和)-(15的倍数和)
这些是简单的等差级数,所以你甚至不需要循环
你要把15的所有倍数加起来。这是一个简单的数学问题:
在15的情况下,由于它可以被3和5整除,因此在两个函数中都要计数两次。
我建议您可以使用一个单回路和||
。当然,一个公式会更好,但那只是数学,我怀疑你会喜欢它:)
顺便说一句,欧拉项目更多的是数学/计算机科学,而不是纯粹的编程,所以当你有疑问的时候,试着用数学的方式思考:)
正如大多数人指出的那样,你把15的倍数加了两次。
提示另一个解决方案:
小于1000的3的倍数之和为
SUMBELOW(3,1000) = 3 + 6 + 9 + ... + 999 = 3*(1+2+3+...+333) = 3*333*(1+333)/2 = 3*((1000-1)/3)*(1+(1000-1)/3)/2
(所有的除法都是整数除法…)
对于计算5和15的倍数的和也有类似的公式。要得到总的结果,你必须把3和5的和相加,然后减去15的和…
您的解决方案没有考虑到某些数字(如15)可以被5和3整除的事实。你把它们加了两次。
我猜你是重复计算了3 和 5的倍数
这是最好的答案,也是我能做的最简单的:
{
int sum ;
for (int i=1;i<1000;i++){
if (i%3==0 || i%5==0) sum+=i;
}
cout<<sum;
}
相关文章:
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 从值小于256的uint16到uint8的Endian安全转换
- 将stl字符串缩小到小于15个字符的容量
- 如何检查两个 std::向量在小于 O(n) 的时间复杂度内是否相等
- 为什么我只能在C++中使用可变长度数组分配小于 10 mb 的内存?
- 如何为字符串生成唯一但一致的 N 位哈希(小于 64 位)?
- sizeof(size_t) 可以小于 sizeof(int) 吗?
- 如何在C++中写入 1000 个文件时有效地缓冲
- C++:如何计算二叉树中其值模块高度小于 2 的节点数?
- unique_ptr < 0 或小于运算符做什么?
- 为什么 Lisp 中 1000 阶乘的计算如此之快(并显示正确的结果)?
- C++模板元编程(版本小于 17,最好是 11)
- 从小于或等于某个 N 的数字列表中最小化或找到 n 个理想的子集和
- 为什么 std::find( s.begin(), s.end(), val ) 比集合 s 的 s.find(val) 慢 1000 倍<int>?
- 为什么可以将 std::unique_ptr* u1 <A>作为 u1[1000] 访问并且它仍然有效
- C++:创建1000次唯一的随机分布,在任何分布中都没有重复的数字
- c++curl返回413请求实体过大,但是post大小远小于max大小
- 如何在随机数列表中查找大于或小于的元素
- int x=1000和just x=1000产生不同的值
- 小于1000的所有是3或5的倍数的数的和