-6

私は現在、最後に使用された整数の値を保存する必要があるプログラムに取り組んでいます。

このシナリオを考えてみましょう:

   for (int i = 1;i<=28123;i++){
        if (isAbundant(i)){
            if (i*2 <= 28123){
                sum2 += i*2;
            }
            if (i + [the previous value of i] <= 28123){
                sum2 += i + [the previous value of i];
            }
        }
    }

previous value of iの前の値を実際に表すにはどうすればよいiですか? i別の変数として保存する必要がありますか? iだとすれば、そのまま現在に変わるのではないiか?

この問題が発生した問題セットを認識している場合: 問題自体についてコメントしないでください。質問に直接答えてください。

4

2 に答える 2

3

質問の仕方に関係なく (礼儀にお金はかかりません)、ループの外側で int i を定義します。

int i=0;
for (i = 1;i<=28123;i++){
    if (isAbundant(i)){
        if (i*2 <= 28123){
            sum2 += i*2;
        }
        if (i + (i-1) <= 28123) { //your only ++ing i, so previous value is always i-1
            sum2 += i + (i-1);
        }
    }
}

//i is now accessable here
于 2013-03-17T20:33:38.360 に答える
1

これを試して。ただし、要件に応じて、最初の反復の特殊なケースを処理する必要がある場合があります。

int pre = 0;
for (int i = 1; i <= 28123; i++) {
    if (isAbundant(i)) {
        if (i * 2 <= 28123) {
            sum2 += i * 2;
        }
        if (i + pre <= 28123) {
            sum2 += i + pre;
        }
    }
    pre = i;
}
于 2013-03-17T20:35:20.977 に答える