zoukankan      html  css  js  c++  java
  • 最大子数组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; }

  • 相关阅读:
    Think in java 4th读书笔记__last update20151130
    Angular学习笔记--last_update 20151106
    程序员技术练级攻略(转载)
    缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级等问题(转载)
    简单理解 RPC(转载)
    Redis 为什么使用单进程单线程方式也这么快(转载)
    redis详解(三)-- 面试题(转载)
    redis应用-sortedset实现排行榜(转载)
    LRU原理和Redis实现——一个今日头条的面试题(转载)
    全面理解Java内存模型(JMM)及volatile关键字(转载)
  • 原文地址:https://www.cnblogs.com/fooreveryu/p/5324193.html
Copyright © 2011-2022 走看看