- 论坛徽章:
- 0
|
原帖由 dbcat 于 2006-1-16 00:52 发表
题目如下:
令 X(1), X(2),X(3), X(4) 。。。X(n)是一串实数(不需要一定为正数)。
设计一个O(n)的算法,寻找一个(连续的)子序列X(i),X(i+1)。。。X(j),使得它
们的乘积在所有 ...
- #include <stdio.h>
-
- double maxprod(double x[],int n)
- {
- int i;
- double best = 1,worst = 1,bcurrent = 1,wcurrent = 1,t;
-
- for(i = 0;i<n;++i){
- bcurrent *= x[i];
- wcurrent *= x[i];
- if(bcurrent>best) best = bcurrent;
- if(wcurrent>best) best = wcurrent;
- if(bcurrent<worst) worst = bcurrent;
- if(wcurrent<worst) worst = wcurrent;
- if(wcurrent>bcurrent)
- t = bcurrent,bcurrent = wcurrent,wcurrent = t;
- if(bcurrent<1) bcurrent = 1;
- if(wcurrent>1) wcurrent = 1;
- }
- return best;
- }
-
- int main()
- {
- int n,i;
- double x[100];
-
- scanf("%d",&n);
- for(i = 0;i<n;++i) scanf("%lf",&x[i]);
- printf("%lf\n",maxprod(x,n));
- }
复制代码 |
|