PATtest1.3:最大子列和
Posted captain-dl
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PATtest1.3:最大子列和相关的知识,希望对你有一定的参考价值。
题目源于:https://pintia.cn/problem-sets/16/problems/663
题目要求:输入一个数列,求其最大子列和。
问题反馈:1.部分C++代码不是很熟练
2.没有仔细读清楚题目,原文已经说过小于零的情况,不用过多的思考
解决方法:1.打印课上的常见代码,记忆背诵并默写
2.写题之前,先读题。多读英文的题,习惯英文读题
自己写的代码:
#include<stdio.h> //using namespace std #define MAXN 100000 void maxsub(int b[], int m){ int sumtem = 0, maxsum = -1; int c = 0, d = m-1,begin=0; int j=0; for ( j = 0; j<m; j++){ sumtem += b[j]; if (sumtem>maxsum){ maxsum = sumtem; begin=c; d = j; } else if (sumtem<0) { sumtem = 0; c = j+1; } } int k=0; for(j = 0; j<m; j++){ if(b[j]<0) k++; } if(k==m){ maxsum=b[0]; for(j = 0; j<m; j++){ if(b[j]>=maxsum) { maxsum=b[j]; begin=j; d=j; } } } printf(" sum:%d first:%d last: %d ", maxsum, b[begin], b[d]); } int main(void){ int k; scanf("%d", &k); int a[MAXN] = { 0 }; int i = 0; for (i = 0; i<k; i++){ scanf("%d", &a[i]); } maxsub(a, k); return 0; }
优秀的网页代码:
#include "stdafx.h" #include<iostream> #include <vector> using namespace std; int main() { int N; //输入数列长度 cin >> N; int * array = new int[N]; for (int i = 0; i < N; i++) { cin >> array[i]; } //sum为子列和,MAX为最大子列和,first记录子列和的第一项,src为最大子列和的第一项,end为最大子列和的最后一项 int sum=0,first=0,src=N-1,end=N-1,max=-1; //动态规划 for (int i = 0; i < N; i++) { sum += array[i]; //当前子列和>最大子列和时修改MAX,即SUM>MAX时,将max = sum. if (sum > max) { max = sum; src = first; end = i; } //sum<0时重置sum,first if (sum <0) { first = i + 1; sum = 0; } } if (max<0) cout << 0 << ‘ ‘ << array[0] << ‘ ‘ << array[N - 1]; else cout << max << ‘ ‘ << array[src] << ‘ ‘ << array[end]; delete[] array; return 0; } --------------------- 作者:yzh1994414 来源:CSDN 原文:https://blog.csdn.net/yzh1994414/article/details/78070888 版权声明:本文为博主原创文章,转载请附上博文链接!
以上是关于PATtest1.3:最大子列和的主要内容,如果未能解决你的问题,请参考以下文章