• 最大子数组2.0


    成环
    //
    求最大子数组和 张鹏宇 武于微 /**************************************************************** 题目要求:
    用户输入整数组,首尾相接,寻找最大子数组,求出其和,并返回子数组位置
    思路:
    用户随机输入num个整数(num由用户确定),存入数组number[][] 用循环实现二维数组转化,目的是实现数组收尾相接,找出最大子数组 用两个循环实现寻找每一个整数作为初始值得最大子数组,并将结果存入CMax[] 最后输出CMax中的最大值, 每次扫描寻找子数组时,定义一个flag[]数组 对应用来存储该位置的整数是否在子数组中 最后扫描flag[],输出对应位置整数即可 不足:
    输出子数组位置时:情况一:****ABC****(ABC是目标整数,*是无用数据)
             情况二:------+++++(-表示负数+表示正数)
    这两种情况无法输出子数组,调试不知道哪里错了,子数组的和一切正常
    ****************************************************************
    */ #include<iostream> #include<cmath> using namespace std; int main() { int num,Max,number[200][200],dp[200][2],CMax[200],flag[200][200]={0}; cout<<"请输入整数个数:"<<endl; cin>>num; cout<<"请输入整数组:"<<endl; for(int i=0;i<num;i++) cin>>number[0][i]; for(int i=1;i<num;i++)/**********二维数组转化**********/ { for(int j=0;j<num-1;j++) number[i][j]=number[i-1][j+1]; number[i][num-1]=number[i-1][0]; } for(int i=0;i<num;i++)/***********第N行**********/ { for(int j=1;j<num+1;j++)/***********前N个**********/ { dp[j][0]=max(dp[j-1][0],dp[j-1][1]); dp[j][1]=max(dp[j-1][1]+number[i][j],number[i][j]); if(number[i][j]==dp[j][1]) { for(int k=0;k<j;k++) flag[i][k]=0; flag[i][j]=1; } else if(dp[j-1][1]+number[i][j]==dp[j][1]) flag[i][j]=1; CMax[i]=max(dp[j][0],dp[j][1]); } } Max=CMax[0]; int k; for(int i=0;i<num-1;i++) { if(Max<CMax[i]) { Max=CMax[i]; k=i; } } cout<<"子数组为:"<<endl; for(int j=0;j<num;j++) { if(flag[k][j]==1) cout<<number[k][j]<<" "; } cout<<endl; cout<<"和为:"<<Max<<endl; return 0; }

  • 相关阅读:
    pthread_create用法
    linux下C和shell调用的popen函数
    Linux下使用popen()执行shell命令
    RBL, UBL, Uboot的关系
    windows下搭建NFS服务器
    windows nfs server for linux
    PowerDesigner数据模型(CDM—PDM—SQL脚本的转换流程)
    PowerDesigner反向生成数据库模型(MySql篇)
    JAVA Apache POI 之sax 解析10万级大数量数据
    GC overhead limit exceeded,tomcat修改jvm内存
  • 原文地址:https://www.cnblogs.com/fooreveryu/p/5324193.html
Copyright © 2020-2023  润新知