zoukankan      html  css  js  c++  java
  • 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 
    版权声明:本文为博主原创文章,转载请附上博文链接!
  • 相关阅读:
    卡片选项页面 JTabbedPane 的使用
    下拉列表 JComboBox 的使用
    单选按钮 JradioButton 和复选框 JcheckBox 的使用
    标签 JLable 类
    文本区 JTextArea 的使用
    密码框JPasswordField 的使用
    JHDU 2601 An easy problem (数学 )
    HDU 2554 N对数的排列问题 ( 数学 )
    LaTeX初识 新手入门 Texlive和Texmaker学习
    [leetcode-387-First Unique Character in a String]
  • 原文地址:https://www.cnblogs.com/captain-dl/p/9909925.html
Copyright © 2011-2022 走看看