码迷,mamicode.com
首页 > 其他好文 > 详细

PATtest1.3:最大子列和

时间:2018-11-05 17:35:52      阅读:224      评论:0      收藏:0      [点我收藏+]

标签:code   部分   color   pre   最大   网页   blog   scan   sdn   

题目源于: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:最大子列和

标签:code   部分   color   pre   最大   网页   blog   scan   sdn   

原文地址:https://www.cnblogs.com/captain-dl/p/9909925.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!