數組乘積(15分)
輸入:一個長度為n的整數數組input
輸出:一個長度為n的整數數組result,滿足result[i] = input數組中除了input[i]之外所有數的乘積(假設不會溢出)。比如輸入:input = {2,3,4,5},輸出result = {60,40,30,24}
程序時間和空間復雜度越小越好。
#include <stdio.h> pr_arr( arr[], ( i=;i<n;i++ printf( printf( arrayMultiply( input[], result[], n) (n<=) result[]= ( i =;i<n;i++) result[i]=result[i-]*input[i- q= ( i=n-;i>=;--i) q*=input[i+ result[i]*= main( s[]={,,,,,, n=(s)/( *result = }
輸入:一個長度為n的整數數組input
int *cal(int* input , int n) { int i ; int *result = new int[n]; result[0] = 1; for(i = 1 ; i < n ; ++i) result[i] = result[i-1]*input[i-1]; result[0] = input[n-1]; for(i = n-2 ; i > 0 ; --i) { result[i] *= result[0]; result[0] *= input[i]; } return result; }
測試代碼:
#include<iostream> using namespace std; int *cal(int *input , int n) { int i; int *result = new int[n]; result[0] = 1; for(i = 1 ; i < n ; ++i){ result[i] = result[i - 1] * input[i - 1]; } result[0] = input[n - 1]; for(i = n - 2 ; i > 0 ; --i){ result[i] *= result[0]; result[0] *= input[i]; } //return result; for(int i = 0 ; i < n ; ++i) cout<<result[i]<<","; cout<<endl; return 0; } int main() { int input[] = {2 , 3 , 4 , 5}; int length = sizeof(input) / sizeof(int); *cal(input , length); return 0; }