- 论坛徽章:
- 0
|
yzc2002 兄的代码似乎有问题,算法我没看明白。
double
max_subsequence_mul( double a[], unsigned int n, int *begin, int *end )
{
double this_mul, max_mul;
int best_i, best_j, i = 0, j;
this_mul = max_mul = 1; best_i = best_j = -1;
double max;
int pos_i, pos_j, pos_start = 0;
double pos_mul, max_pos;
pos_mul = max_pos = 1; pos_i = pos_j = -1;
for( j=0; j<n; j++ )
{
pos_mul *= a[j];
if( pos_mul > max_pos)
{
max_pos = pos_mul;
pos_i = pos_start;
pos_j = j;
}
else if(pos_mul < 1)
{
pos_start = j + 1;
pos_mul = 1;
}
this_mul *= a[j];
if( this_mul > max_mul )
{
max_mul = this_mul;
best_i = i;
best_j = j;
}
else if( fabs(this_mul) < 1)
{
i = j + 1;
this_mul = 1;
}
}
if(max_pos > max_mul)
{
*begin = pos_i;
*end = pos_j;
max = max_pos;
}
else
{
*begin = best_i;
*end = best_j;
max = max_mul;
}
return( max );
}
2,2, -2,0.5, 0.5, -2,2, 2, 2, 2, -4
算出来是 64.0,实际应当是 128
我很想把这个问题搞清楚,希望大家能把想法写清晰一些。
to emacsnw: 你所说的 bcurrent 当然有一个起点,这个起点是如何变化的呢?跟 wcurrent 是同一个起点吗? |
|