#include<iostream> #include<ctime> using namespace std; int main() { cout<<"数1601-2 20163980 \n黄瑞波"<<endl;; int m,n=0,star=0,end=0; cout<<"1.手动输入数组。\n2.随机生成数组。请选择功能:";//选择自己输入或者随机生成 cin>>m; switch(m) { case 1:{ int *p=new int[n];//开辟为n的存储空间 cout<<"请输入数组的长度:"; cin>>n; if(n<0) { cout<<"输入的数组长度有误,请重新输入!"<<endl;//判断数据有效性 return 0; } cout<<"输入一个"<<n<<"维整型数组:"; //以下算法代码参考与网络。 for(int i=0;i<n;i++) { cin>>p[i]; } int sum=p[0]; int max_sum=p[0]; for(int i=1;i<n;i++) { if(sum>0) //是否为正数 { sum=sum+p[i]; //是正数,做和。 if(sum>max_sum) // 并判断是否为最大,是让其赋值给max_sum。 { max_sum=sum; end=i; } } else { sum=p[i]; //是负数,将第i+1个数的值赋值给和值sum if(sum>max_sum)//并判断是否为最大,是让其赋值给max_sum。 { max_sum=sum; star=i; end=i; } } } cout<<"最大子数组位置为第"<<star+1<<"个到第"<<end+1<<"个"<<endl; cout<<"最大子数组和为"<<max_sum<<endl; };break; case 2: { int *p=new int[n]; cout<<"请输入数组的长度:"; cin>>n; if(n<0) { cout<<"输入的数组长度有误,请重新输入!"<<endl; return 0; }cout<<"随机数组为:"; for(int i=0;i<n;i++) { p[i]=-rand()%4000+2000; cout<<p[i]<<" "; } cout<<endl; int sum=p[0]; int max_sum=p[0]; for(int i=1;i<n;i++) { if(sum>0) //判断是否为正数 { sum=sum+p[i]; //是正数,做和。 if(sum>max_sum) // 并判断是否为最大,是让其赋值给max_sum。 { max_sum=sum; end=i; } } else { sum=p[i]; //是负数,将第i+1个数的值赋值给和值sum if(sum>max_sum)//并判断是否为最大,是让其赋值给max_sum。 { max_sum=sum; star=i; end=i; } } } cout<<"最大子数组位置为:第"<<star+1<<"个到第"<<end+1<<"个"<<endl; cout<<"最大子数组和为:"<<max_sum<<endl; };break; } return 0; }
原文地址:https://www.cnblogs.com/huangrb/p/9784124.html
时间: 2024-10-12 07:25:05