數組乘積(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;
}