本文共 605 字,大约阅读时间需要 2 分钟。
输入n个元素组成的序列S,找出一个乘积最大的连续子序列。如果这个最大乘积不是正数,则输出0;1<=n<=18,-10<=Si<=10.
分析: 连续子序列有两个要素,起始位置和结束位置,则只需找出起始位置和结束位置即可,注意由于每个元素的绝对值不超过10并且个数不超过18个元素,则最大的乘积不会超过10的18次幂,可用long long储存,在表示数的时候注意数的大小。 代码如下:#include#include #include int main(){ int n,i,k=0,j; int str[20]={ 0}; while(scanf("%d",&n)!=EOF&&n!=0) { long long int maxn=0,ma=1;/*因为若小于0,则输出0,所以后面与0进行比较*/ for(i=0;i maxn)//进行比较 maxn=ma; } } k++; printf("Case #%d: The maximum product is %lld.\n\n",k,maxn); } return 0;}
进行暴力求解
转载地址:http://cugsi.baihongyu.com/