原题:
/*
* 原题:
* If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. The sum of these multiples is 23.
*
* Find the sum of all the multiples of 3 or 5 below 1000.
*
*/
翻译:
/*
* 翻译:
* 我们列出10以下所有的自然数,并且它们是3或的倍数,我们得到3,5,6,9,他们的和是23
*
* 找出1000以下所有3或5的倍数,计算总和。
*/
解题思路:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
/// <summary>
/// 解题思路:
/// 这题没有亮点,所以我把它做的有点看点。
/// 我们可以利用数学公式,利用集合缓存答案然后进行筛选。也就是去掉重复的。
/// 总之,大体思路就是找到所有满足的数字,去掉重复。累加和。
///
/// 倒奶有了一个新的做法。不知道算不算是一个亮点。
/// 1、定义两个自然数,一个表示3的倍数;一个表示5的倍数。两个数字每次分别加3和5,如果+3或+5后和另一个数字一样,则再+5。
/// 2、每加完一次,就加到累加器中。
/// 3、直到这两个数字有一个>1000就跳出。
/// </summary>
/// 解题思路:
/// 这题没有亮点,所以我把它做的有点看点。
/// 我们可以利用数学公式,利用集合缓存答案然后进行筛选。也就是去掉重复的。
/// 总之,大体思路就是找到所有满足的数字,去掉重复。累加和。
///
/// 倒奶有了一个新的做法。不知道算不算是一个亮点。
/// 1、定义两个自然数,一个表示3的倍数;一个表示5的倍数。两个数字每次分别加3和5,如果+3或+5后和另一个数字一样,则再+5。
/// 2、每加完一次,就加到累加器中。
/// 3、直到这两个数字有一个>1000就跳出。
/// </summary>
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 using System;
2
3 class Multiples3_5
4 {
5 internal static int SumMultiples3_5()
6 {
7 int T = 3;
8 int F = 5;
9 int Sum = T + F;
10 int Max = 1000;
11
12 while (T <= Max && F <= Max)
13 {
14 if (T < F)
15 {
16 T = T + 3 == F ? T + 6 : T + 3;
17 Sum += T >= Max ? 0 : T;
18 }
19 else if (T > F)
20 {
21 F = F + 5 == T ? F + 10 : F + 5;
22 Sum += F >= Max ? 0 : F;
23 }
24 }
25
26 return Sum;
27 }
28 }
2
3 class Multiples3_5
4 {
5 internal static int SumMultiples3_5()
6 {
7 int T = 3;
8 int F = 5;
9 int Sum = T + F;
10 int Max = 1000;
11
12 while (T <= Max && F <= Max)
13 {
14 if (T < F)
15 {
16 T = T + 3 == F ? T + 6 : T + 3;
17 Sum += T >= Max ? 0 : T;
18 }
19 else if (T > F)
20 {
21 F = F + 5 == T ? F + 10 : F + 5;
22 Sum += F >= Max ? 0 : F;
23 }
24 }
25
26 return Sum;
27 }
28 }