求出所有3或5的倍数之和到1000

时间:2011-07-29 16:36:45

标签: c++ math logic

我正在使用C ++解决Project Euler的问题,但我没有得到第一个问题的正确答案。

这是我的代码:

#include <iostream>

using namespace std;

int main()
{
    int b;
    int c;

    for (int a = 0; a <= 1000;)
    {
        a = a + 3;
        b = a + b;
    }
    cout << b << "\n";

    for (int a = 0; a <=1000;)
    {
        a = a + 5;
        c = a + c;
    }
    cout << c << "\n";

    b = b + c;
    cout << b << "\n";
    return 0;
}

我的输出是:

167835
101505个
269340

我逻辑中的错误在哪里?

6 个答案:

答案 0 :(得分:6)

您要添加的所有值均为3 5的倍数(即15的倍数)两次。此外,您还将包括1002和1005,这可能不是预期的。

答案 1 :(得分:2)

你重复计算的数字是3和5的倍数(即15的倍数)。

答案 2 :(得分:2)

考虑,找到3到20的所有倍数的总和?

答案:=&gt;

3,6,9,12,15这是3到20的倍数

3到20的所有倍数的总和=&gt; [3 + 6 +9 + 12 + 15]

(3 + 6 +9 + 12 + 15)你可以用以下方式重写

3(1 + 2 + 3 + 4 + 5)=&gt; 3(15)=&gt; 45

序列总和可以使用以下公式计算

K(K + 1)/ 2 =&gt;这里K是5 =&gt; 5(5 + 1)/ 2 =&gt; 15

通常,我们可以说在给定范围R

内任意数(N)的倍数

K = R / N;

N *(K(K + 1))/ 2

在我们的例子中,R = 20且N = 3

@Component({
  selector: 'combined-component',
  template: `
    <form [formGroup]="ltsForm" novalidate (ngSubmit)="save()">
      <div formArrayName="products">
        <div *ngFor="let p of products.controls; let i=index">
          <div [formGroupName]="i">
            <input formControlName="id">
            <input type="checkbox" formControlName="value">
          </div>
        </div>
      </div>
      <button type="submit" [disabled]="!ltsForm.valid">
          Submit
      </button>
    </form>
  `
})
export class CombinedComponent implements OnInit {

  ltsForm: FormGroup;

  get products() { return this.ltsForm.get('products'); }

  constructor(private formBuilder: FormBuilder) {}

  ngOnInit() {
      this.ltsForm = this.formBuilder.group({
        products: this.formBuilder.array([])
      });

      for (let i = 0; i < 3; ++i) {
        this.addProduct();
      }
  }

  addProduct() {
    this.products.push(this.formBuilder.group({
      id: '',
      value: false
    }));
  }

  save() {
    console.log(this.ltsForm.value);
  }
} 

在您的情况下,您需要调用此函数tripice =&gt;

sumDivisibeBy(1000,3)+ sumDivisibeBy(1000,5)-sumDivisibeBy(1000,15)

答案 3 :(得分:0)

除了重复计数15的倍数,您的增量顺序错误。如果你先增加a,你的值将大于1000.而且我不确定c ++初始化整数,但可能将它们设置为等于0,至少对于读者而言。

答案 4 :(得分:0)

不会加扰3和5,你可以递增1并检查数字是否可以被3或5整除。计算机是为数字运算而设计的。

int sum = 0;
for (int i = 0; i < 1000; i++)
{
    if (i%3 == 0 || 
        i%5 == 0)
    {
        sum += i;
    }
}
cout << "SUM:" << sum << endl;

答案 5 :(得分:0)

虽然其他人已准确发布了你错误的地方,但你应该试着弄清楚你是如何得到错误答案的。

在您的情况下,您可以将您确定的所有值写为3的倍数和5的倍数;然后你可以分析你应该看到的333倍数和你应该看到的199倍数。

我不想泄露找到实际解决方案的关键(尽管其他人已经解决了这个问题)但是在PE上解决问题的部分原因是调试。