从N个整数中找了(n-1)个元素乘积最大的那一组

转载地址:http://www.dewen.org/q/4311

       http://blog.csdn.net/hishentan/article/details/37094529

1.问题描述:给定一个长度为N的整数数组,只允许用乘法,不能用除法,计算任意(N-1)个数的组合中乘积最大的一组。

2.算法思想:


3.代码实现:

[cpp]  view plain  copy
  1. #include   
  2.   
  3. using namespace std;  
  4.   
  5. const int N = 5;  
  6.   
  7. int main()  
  8. {  
  9.     int a[N];  
  10.     int i;  
  11.     for(i =0; i <= N-1; i++)  
  12.         cin >> a[i];  
  13.   
  14.     int s[N],t[N+1],p[N+1];  
  15.     s[0] = 1;  
  16.     t[N] = 1;  
  17.   
  18.     //s[0]       s[1]  s[2]   .....s[N-1]  
  19.     for(i = 1; i<= N-1;i++)  
  20.         s[i] = s[i-1]*a[i-1];  
  21.   
  22.     //t[N]       t[N-1]  t[N-2] ... t[1]  
  23.     for(i = N-1 ;i>=1;i--)  
  24.         t[i] = t[i+1]*a[i];  
  25.   
  26.   
  27.     for(i = 1;i<=N; i++)  
  28.         p[i] = s[i-1]*t[i];  
  29.   
  30.     int max = 1;  
  31.     int del_max_index = 1;  
  32.     for(i = 1;i<=N;i++)  
  33.     {  
  34.         if(p[i]>=max)  
  35.         {  
  36.             max = p[i];  
  37.             del_max_index = i;  
  38.         }  
  39.               
  40.     }  
  41.   
  42.     cout << "Except for the " << del_max_index << " st number, the multiply of other n-1 is max value" << endl;  
  43.   
  44.   
  45.     return 0;  
  46. }  
  47.   
  48. /* 
  49.  
  50. arr[0]---arr[N-1] 
  51.  
  52.  
  53. s[0]  = 1; 
  54. t[N]  = 1; 
  55.  
  56. s[i] = s[i-1]*arr[i-1];  i = 1 -- N-1 
  57. t[i] = t[i+1]*arr[i];    i = N-1 -- 1 
  58.  
  59. p[1] = s[0]*t[1];//前0个元素 和 后 N-1个元素的乘积 
  60. p[2] = s[1]*t[2]; 
  61.  
  62. p[N] = s[N-1]*t[N];//前N-1个元素后 后N-N(0)个元素的乘积 
  63.  
  64. */  

你可能感兴趣的:(算法)