如何通过与 C++ 中的其他项相乘来更新数组项

Sha*_*kir 2 c++ arrays

我想要得到的结果是将索引值与其他索引值相乘。例如在下面的代码中:我想通过 arr[0]*arr[1] 更新 arr[0] 值,通过 arr[9]*arr[9-8] 更新 arr[9] 值,对于剩余的索引,它将是 arr[i-1] * arr[i] * arr[i+1]。它在第一个索引上运行良好,但在其他索引上我得到了意想不到的结果。

#include<iostream>
using namespace std;

int main(){
    int arr[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, j, k;
    
    for(j = 0; j < 10; j++){
        if(j == 0){
            arr[j] = arr[j] * arr[j + 1];
        }else if(j == 9){
            arr[j] = arr[j] * arr[j - 1];
        }else{
            arr[j] = arr[j - 1] * arr[j] * arr[j + 1];
        }
    }
    
    for(k = 0; k < 10; k++){
        cout<<arr[k]<<" ";
    }
}
Run Code Online (Sandbox Code Playgroud)

输出: 2 12 144 2880 86400 3628800 203212800 1746419712 -1736015872 -180289536

预期结果: 2 6 24 60 120 210 336 504 720 90

Ted*_*gmo 5

您需要将结果存储在单独的数组中,否则您将覆盖用于将来计算的同一数组中的值。

在您的情况下,当j == 0您执行以下操作时:

arr[0] = arr[0] * arr[1]; // 1 * 2 = 2
Run Code Online (Sandbox Code Playgroud)

所以arr[0]现在2。然后你做

arr[1] = arr[0] * arr[1] * arr[2]; // 2 * 2 * 3 = 12, not 1 * 2 * 3 = 6
Run Code Online (Sandbox Code Playgroud)

...等等。如果您将结果存储在一个单独的数组中,那么这个问题就会消失。例子:

arr[0] = arr[0] * arr[1]; // 1 * 2 = 2
Run Code Online (Sandbox Code Playgroud)

输出:

2 6 24 60 120 210 336 504 720 90 
Run Code Online (Sandbox Code Playgroud)

  • @Shakir 当然,这里有一系列原因:[为什么 `using namespace std;` 被认为是不好的做法?](/sf/ask/101690501/ -实践) (2认同)