可以看到这种中间发生分隔,并且要求剩下的数间的运算无论是加减乘除都能用前后缀和做。
#include <iostream>
using namespace std;
int n;
int a[105];
int result[105];
int b[105];
int prefix[105];
int suffix[105];
void calculate(int a[105], int result[105]){
for(int i=0; i<n; ++i){
prefix[i] = (i == 0) ? 1 : prefix[i-1] * a[i-1];
}
for(int i=n-1; i>=0; --i){
suffix[i] = (i == n-1) ? 1 : suffix[i+1] * a[i+1];
}
for(int i=0; i<n; ++i){
result[i] = prefix[i] * suffix[i];
}
}
int main()
{
cin >> n;
for(int i=0; i<n; i++){
cin >> a[i];
}
calculate(a, result);
for(int i=0; i<n; ++i){
cout << result[i] << " ";
}
cout << endl;
return 0;
}
可以看到我们设置一个函数,分别求前后缀和,注意这边要初始化prefix[0]
和 suffix[n-1],
然后求一个乘积数组,然后将数组输出
所以类似这些中间发生变换然后求前后的加减乘除的问题可以用前后缀和做