• 在一整型数组中找到此数组中子数组和的最大值


    小组成员:曹锦锋,王伟光

    讨论的思想:
    1:想要求一整型数组的子数组的最大值那么我们的想法是从第一个数往后加直到数组末尾,然后再从第二个数往后加直到末尾以此类推,在相加的时候通过一个sum保存几个数相加的和并把它存在一个二维数组中,二维数组记录从第几个数加到第几个数的和。例如:从第一个数加到第三个数那么sum的值就是这三个数的值,再将其保存在b[1][3]中。
    2:当从第二个数开始往后加的时候需要另一个循环控制所以需要两个循环i,j;j=i,这样可以减少一些不必要的数据存储。
    for(i=0;i<5;i++)
       {
            sum=0;
     for(j=i;j<5;j++)//j从i处开始往后加
    3:将数据都存储到了二维数组b[i][j]时在找到这个数组的最大值,并且记录此时的位置,即可求出这个整型数组最大子数组的值及位置。

    出现的问题:开始没有考虑到sum重置,当从第二个数往后相加时sum需要重置否则会越来越大。
                没有考虑到j从i开始,导致出现了b[1][2]和b[2][1]的这种情况。

    代码:

    复制代码
    #include<stdio.h>
    int main()
    {
        int a[5],b[5][5];
        int i,j,sum,max,m,n;
        printf("输入5个整数
    ");
        for(i=0;i<5;i++)
            scanf("%d",&a[i]);//输入数据
        for(i=0;i<5;i++)
        {
            sum=0;
            for(j=i;j<5;j++)//从第一位开始往后相加求和
            {
                sum+=a[j];
                b[i][j]=sum;//保存到二维数组中
            }
        }
        max=b[0][0];
        for(i=0;i<5;i++)//比较二维数组找到里面的最大值
        {
            for(j=i;j<5;j++)
            {
              if(b[i][j]>max)
              {
                  max=b[i][j];
                  m=i+1;//记录最大值的位置
                  n=j+1;
              }
            }
        }
        printf("最大值和为:%d   他是从第%d 加到第%d 位的和
    ",max,m,n); 
        return 0;
    }
    复制代码

    结果:

    课上讨论:

     

  • 相关阅读:
    iOS集成ijkplayer视频直播框架,遇到的bug和坑...
    push notification获取device token
    ios xcode Code signing failed 解决方案
    ios 返回指定导航控制器
    ios git 终端提交
    mysql问题集合
    mysql 备份和恢复
    cacti 异常问题
    硬盘各项检测
    LVS DR模式(直接路由模式)
  • 原文地址:https://www.cnblogs.com/caojinfeng/p/3592391.html
Copyright © 2020-2023  润新知