以下为我的代码,我试了一些数据,表示没发现错误?
求解
1 #include <iostream> 2 using namespace std; 3 int main() 4 { 5 long n,i; //n代表后续有n个数 6 int *p1=nullptr,*p2=nullptr; //用来申请空间 7 long begin_index,end_index;//开始‘结束下标 8 long sum; 9 bool flag;//flag用来根据情况输出内容,当flag=falses时,表示数列全为负数 10 int all; 11 cin>>all; 12 for(int ri=1;ri<=all;++ri) 13 { 14 sum=0; 15 //输入数据 16 cin>>n; 17 p1=new int[n]; 18 p2=new int[n]; 19 for(i=0;i!=n;++i) 20 cin>>p1[i]; 21 flag=false; 22 //找到第一个非负数的下标 23 for(i=0;i!=n;++i) 24 { 25 if(p1[i]>=0) 26 { 27 begin_index=i; 28 flag=true; 29 break; 30 } 31 } 32 //如果全为负数直接输出第一个数字,否则申请从开始下标到结束的数字个数的空间 33 if(flag) 34 { 35 //将第一个非负数之后所有和存入p2 36 for(i=begin_index;i!=n;++i) 37 { 38 sum+=p1[i]; 39 p2[i]=sum; 40 } 41 //寻找最后一位下标 42 end_index=begin_index; 43 for(i=begin_index+1;i!=n;++i) 44 { 45 if(p2[end_index]<p2[i]) 46 end_index=i; 47 } 48 //输出结果 49 cout<<"Case "<<ri<<":\n"; 50 cout<<p2[end_index]<<" "<<begin_index+1<<" "<<end_index+1<<endl; 51 } 52 else 53 { 54 end_index=0; 55 for(i=1;i!=n;++i) 56 { 57 if(p1[end_index]<p1[i]) 58 end_index=i; 59 } 60 cout<<"Case "<<ri<<":\n"; 61 cout<<p1[end_index]<<" "<<end_index+1<<" "<<end_index+1<<endl; 62 } 63 delete []p1; 64 delete []p2; 65 p1=nullptr; 66 p2=nullptr; 67 if(ri!=all) 68 cout<<endl; 69 } 70 71 return 0; 72 }