C语言穷举解决最大子序列含测试

2023-10-27

题目再现

设给定一个整数序列 a 1 , a 2 , . . . , a n a_1,a_2,...,a_n a1,a2,...,an(其可能有负数),设计一个穷举算法, ∑ n = 1 j a k \sum\limits_{n=1}^j{a_k} n=1jak的最大值,例如对于序列A={1,-1,1,-1,-1,1,1,1,1,1,-1,-1,1,-1,1,-1},子序列 A [ 5..9 ] = 1 , 1 , 1 , 1 , 1 A[5..9]={1,1,1,1,1} A[5..9]=1,1,1,1,1具有最大值5.

输入输出及测试效果

在这里插入图片描述

题目讲解

设i和j都是序列中元素的序号(称为下标),若从序列中某个元素起连续提取若干元素组成的序列,即为原序列的子序列。算法尝试从每个i(初始为0)起,用j连续累加1个、2个,。。。,记下累加值中最大的,以及相应的i、j值,算法结束,即得所需结果。设用数组a[n]存放序列, a i a_i ai存储于a[i-1]内

题目源码

#include<stdio.h>
#define maxsize 6
int maxSubsequence(int a[], int n,int *i,int *j) {
    //算法返回最大子序列的值,并通过引用参数i和j返回起止运算下标
    int sum,maxSum,id,jd,k;
    maxSum = 0;
    *i = 0;
    *j = 0;
    for(id = 0;id<n;id++) {
        for(jd = id;jd<n;jd++) {
            sum = 0;
            for(k = id;k<=jd;k++)
                sum += a[k];
            if(sum > maxSum) {
                maxSum = sum;
                *i = id;
                *j = jd;
            }
        }

    }
    return maxSum;
}

int main(){
    int A[maxsize] ;
    for(int i =0;i<maxsize;i++)
        scanf("%d",&A[i]);
    int n = sizeof(A)/sizeof(int);
    int x,y,z;
    printf("输入序列为: ");
    for(int i = 0;i<n;i++)
        printf("%d ",A[i]);
    printf("\n");
    x = maxSubsequence(A,n,&y,&z);
    printf("累加和为%d,区间从%d到%d",x,y,z);
    return 0;
}

源码跑路

假如我们输入的是-1 1 2
一共3个长度,传入的函数参数如下

  • A:数组元素首地址
  • n 数组长度
  • y 区间下限的地址传入
  • z 区间上限的地址传入

maxSubsequence是一个穷举算法,所以我们按照传统的方法进行演示代码结果
返回结果maxsum置为0,i和j置成0

id = 0

  • jd = 0 sum = 0 k = 0k<= 0 maxsum = 0
  • jd =1 sum = 0 k = 0 k <= 1 maxsum = 0
  • jd =2 sum = 0 k=0 k<=2 maxsum = 2

id = 1

  • jd = 1 sum = 0 k = 1 k<= jd maxsum =1
  • jd = 2 sum = 0 k=1 k<= 2 maxsum = 3

id = 2

  • jd = 2 sum = 0 k=2 k<= jd sum = 2 < maxsum =3

id = 3 不满足 直接刷出maxsum

maxsum=3

参考文献

殷人昆著.数据结构与算法解析.北京:清华大学出版社,2021.4

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C语言穷举解决最大子序列含测试 的相关文章

  • 再谈优雅重试(retry)机制

    业务场景 应用中需要实现一个功能 需要将数据上传到远程存储服务 同时在返回处理成功情况下做其他操作 这个功能不复杂 分为两个步骤 第一步调用远程的Rest服务逻辑包装给处理方法返回处理结果 第二步拿到第一步结果或者捕捉异常 如果出现错误或异

随机推荐

  • 顾客端我的订单开发心得与体会

    顾客端中有一个我的订单 显示已经点了的菜品 点了菜的话会把这个菜品的信息放入到餐桌的缓存中 我的订单的菜品是从这个缓存中取出来的 进入我的订单是个刷页 就是把需要的信息放在model里返回给jsp页面 jsp页面中有input标签 刚弄好了
  • OutPutStream输出文件

    package zmx Io import java io File import java io FileNotFoundException import java io FileOutputStream import java io I
  • 地理信息安全在线培训考试系统题库-单选题

    根据 测绘成果管理条例 利用涉及国家秘密测绘成果开发生产的产品 未经 A 进行保密技术处理的 其秘密等级不得低于所用测绘成果的秘密等级 A 国务院测绘行政主管部门或者省 自治区 直辖市人民政府测绘行政主管部门 B 省级以上保密管理部门 C
  • 超市运营情况分析

    超市运营情况分析 本文选取的数据源涵盖了2017年至今的客户 订单 地点和产品数据 本文主要聚焦出现负利润的省 自治区的运营情况 对其出现负利润的原因加以探讨 并分析预测这些省 自治区未来的利润情况 对超市的运营管理决策提供有效的数据支持
  • Shell数组:shell数组的定义、数组长度

    Shell在编程方面比Windows批处理强大很多 无论是在循环 运算 bash支持一维数组 不支持多维数组 并且没有限定数组的大小 类似与C语言 数组元素的下标由0开始编号 获取数组中的元素要利用下标 下标可以是整数或算术表达式 其值应大
  • qt超易实现录屏程序的方法

    QT录屏程序的实现 1 获取桌面的图像 The QApplication desktop function is used to get an instance of QDesktopWidget QApplication desktop
  • Git删除本地在远端已经删除的分支

    git remote prune origin
  • python gzipped source tarball,下载及安装Python详细步骤

    安装python分三个步骤 下载python 安装python 检查是否安装成功 1 下载Python 2 选择下载的版本 3 点开Download后 找到下载文件 Gzipped source tarball 是Linux系统下载的版本
  • python3.7成功换虚拟环境python3.6

    目录 1 打开CMD 查看自己有多少虚拟环境 2 打开anaconda prompt 终端 创建 3 6环境 3 在pycharm中从3 7正确换配置为3 6环境 1 打开CMD 查看自己有多少虚拟环境 C Users Administra
  • shell 中的单行注释和多行注释

    今天在学习shell编程的时候 当自己想对多行进行注释时 发现自己不会 所以在网上去查询下 参考 作者 lansesl2008 地址 http blog csdn net lansesl2008 article details 205583
  • 疯传全网网络10个运维巡检脚本以及使用小技巧

    哈喽大家好 欢迎来到虚拟化时代君 XNHCYL 大家好 我是虚拟化时代君 一位潜心于互联网的技术宅男 这里每天为你分享各种你感兴趣的技术 教程 软件 资源 福利 每天更新不间断 福利不见不散 第1章 前言 巡检脚本在网络运维中非常重要 近期
  • Jenkins远程命令执行漏洞(CVE-2018-1000861)

    声明 好好学习 天天向上 漏洞描述 Jenkins使用Stapler框架开发 其允许用户通过URL PATH来调用一次public方法 由于这个过程没有做限制 攻击者可以构造一些特殊的PATH来执行一些敏感的Java方法 通过这个漏洞 我们
  • C单元测试框架——CMockery (1) 简介

    cmockery 是google发布的用于C单元测试的一个轻量级的框架 主要特点 免费且开源 google提供技术支持 轻量级的框架 使测试更加快速简单 避免使用复杂的编译器特性 对老版本的编译器来讲 兼容性好 并不强制要求待测代码必须依赖
  • 【设计模式】-设计模式总目录

    设计模式 重要性不多说了 之前在简书上简单总结过 这次再来总结一次 更详细版 以此加深印象和帮助理解 01 单例模式 https blog csdn net lovexiaotaozi article details 83896573 02
  • Java并发编程——ReentrantLock重入锁解析

    重入锁 所谓重入锁 即支持重入性 表示能够对共享资源重复加锁 即当前线程获取该锁再次获取不会被阻塞 重入性 在线程获取锁的时候 如果已经获取锁的线程是当前线程的话则直接再次获取成功 由于锁会被获取n次 那么只有锁在被释放同样的n次之后 该锁
  • 二叉树的层序遍历,以及求层数

    二叉树的中序遍历 最主要的一种方法是用队列 Queue 来实现 下面贴出一份实现代码 class Tree int data Tree lchild 左孩子 Tree rchild 右孩子 以下是主要方法 public static voi
  • 自己实现telnet程序

    转自 http blog csdn net gujintong1110 article details 44278535 include
  • Metasploitable渗透测试实战:ms17-010

    漏洞简介 永恒之蓝 即ms17 010 是指2017年4月14日晚 黑客团体Shadow Brokers 影子经纪人 公布一大批网络攻击工具 其中包含 永恒之蓝 工具 永恒之蓝 利用Windows系统的SMB漏洞可以获取系统最高权限 5月1
  • 论文解读:Improving Nighttime Driving-Scene Segmentation via Dual Image-adaptive Learnable Filters

    论文地址 https arxiv org abs 2207 01331 发表时间 Submitted on 4 Jul 2022 v1 last revised 20 Mar 2023 this version v2 项目地址 https
  • C语言穷举解决最大子序列含测试

    题目再现 设给定一个整数序列 a 1 a 2