我正在使用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
我逻辑中的错误在哪里?
答案 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上解决问题的部分原因是调试。