2

このシーケンスを合計するためのアルゴリズムを作成する宿題があります。S = 1 - 1/2 + 1/4 - 1/6 + 1/8 - 1/10 + ... + 1/2nユーザーが 2 を入力した場合、合計は1 - 1/2 = 1/2andになります。

ここに私のコーディングがあります:

int main() {

    int num, N, k;
    double S;
    cout << "enter the sequence : ";
    cin >> N;
    for (num = 1, k = 0, S = 1; num <=N; num++) {
        num++;
        k=+2;
        if (num % 2 == 0) {
            S -= 1/k;
        } else {
            S += 1/k;
        }
    }
    cout << "The sum is " << S;
    system("PAUSE");
    return 0;
}

なぜ合計が常に1を参照するのか、私はとても混乱しています?? なぜこれが起こるのか誰にも説明できますか??

4

3 に答える 3

7

試してみてください1./k— そうしないと、1 を整数で除算すると 0 になります。=+(およびvs+=タイプミスに関する他の回答を参照してください)。

于 2012-11-03T11:44:07.160 に答える
3

あなたのループにはこれがあります

k=+2;

kしたがって、すべての反復に値 2 を割り当てます。あなたはおそらくしたいです

k+=2;

他の回答で強調されている整数除算の問題にも注意してください

于 2012-11-03T11:44:07.417 に答える
1
for(num = 1, sum = 1; num <=N; num++){
    if(num%2==0){
        sum += 1/(num*2);
    }else{
        sum -= 1/(num*2);
    }
}

シーケンスの n 番目の項が(1/((n-1)*2)).

編集: 以下で指摘されているように、除算を実行する場合、結果が整数にならないように、オペランドの 1 つを非整数にする必要があります。上記の私の試みに対する修正は次のようになります。

for(num = 1, sum = 1; num <=N; num++){
    if(num%2==0){
        sum += 1.0/(num*2);
    }else{
        sum -= 1.0/(num*2);
    }
}

http://codepad.org/KgGAxKxS

于 2012-11-03T11:47:29.537 に答える