中兴机试
一、
全部放在一个函数中完成测试。
二、
三、
四、
#include<iostream> using namespace std; void PrintAll(int a[], int nBegin, int nEnd, int nCount,string szPre) { if(nCount==1) { for(int i=nBegin; i<=nEnd; i++) { cout<<szPre<<a[i]<<" "; } cout<<endl; } else { for(int i=nBegin; i<=nEnd-nCount+1; i++) { string szBuf; szBuf=szPre+to_string(a[i]); PrintAll(a, i+1, nEnd, nCount-1, szBuf); } } } int main() { int a[] = {1,2,3,4,5,6}; PrintAll(a, 0, 5, 3, ""); return 0; }
递归求解
五、
#include<iostream> using namespace std; int MaxSub(int a[],int lenth) { //纯粹的动态规划问题,n长的数组要么由大于0的n-1子数组的和加上最后一个数组成, //要么由于前面的数小于0由最后一个数构成, n-1的子数组同样有这样的结构 int sum=0; int tmp=0; for(int i=0;i<lenth;i++) { if(tmp<0) tmp=a[i]; else tmp+=a[i]; if(tmp>sum) sum=tmp; } return sum; } int main(){ int a[]={-2,11,-4,13,-5,-2}; cout<<MaxSub(a,6); return 0; }
#include<iostream> using namespace std; int MaxSub(int a[],int lenth) { int dp[6]; int Sum=0; for(int i=0;i<6;i++) dp[i]=a[i]; for(int i=1;i<lenth;i++) { dp[i]=max(dp[i-1]+a[i],dp[i]); cout<<dp[i]<<" "; if (dp[i]>Sum) { Sum=dp[i]; } } cout<<endl; return Sum; } int main() { int a[]={-2,11,-4,13,-5,-2}; cout<<MaxSub(a,6); return 0; }
六
七