我想要得到的结果是将索引值与其他索引值相乘。例如在下面的代码中:我想通过 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
您需要将结果存储在单独的数组中,否则您将覆盖用于将来计算的同一数组中的值。
在您的情况下,当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)