• 设计一个程序,让它能够返回一个整数数组最大子数的和,并能完成几项测试


    实验人员:常啸帆,毕文强

    实验要求:必须能处理1000个元素;

                      每个元素是int32类型的,出现子数组之和大于显示最大范围会出现什么情况;

                      输入一个整形数组,有正也有负;

                      数组中连续的一个或多个整数组成一个数组,每个子数组都必须有一个和;

                      求所有子数组和的最大值,要求时间复杂度为o(n)。
    实验过程:在本次实验中,我们两人通过所学的c++知识来编写程序,在过程中我们发现了一下问题并逐步解决
                      在编写的过程中,首先会发现数组中少了一个元素,那是因为在循环时length写成了length-1,
               而且max没有初始化,如果初始化为0,那么都是负数时结果为0,这个结果是错误的,原因在于负数都比0小,
               解决方法就是max初始化为数组第一个元素的值。并且在测试时,针对数组为空抛出异常,进行处理。
    实验代码:
                  #include<stdio.h>
                  #include<stdlib.h>
                  #include<string.h>
                   int Largest(int list[],int length)
         {
                     int i;
                     int max;
                     max=list[0];
                          if(list==NULL||length==0)
                             {
                                    printf("数组元素不能为空,请重新输入! ");
                                    return 0;
                             }
                          else
                             {
                                         for(i=0;i<length;i++)
                                              {
                                                 if(list[i]>max)
                                                       {
                                                             max=list[i];
                                              }
                              }
                                              return max;
         }
    }
                                           int main()
                              {
                                        int max;
                                         int i;
                                        int n;
                                         int *a;
                                    char ch;
                                    a=(int*)malloc(n*sizeof(int));
                                      in:    printf("请输入数组的个数: ");
                                       scanf("%d",&n);   
                                          if(n>0)
                                         {
                                                       printf("请输入数组元素: ");
                                                       for(i=0;i<n;i++)
                                                             {
                                                                   scanf("%d",&a[i]);
                                                              }
                                                                     max=Largest(a,n);
                                                                 printf("数组元素的最大值是:%d ",max);
                                          }
                                           else
                                          {
                                                     printf("数组不能为空,请重新输入! ");
                                                     goto in;       
                                                  }
                                                         return 0;
                                         }
     
    测试截图:
     
     
     
     
     
  • 相关阅读:
    mysql索引
    mysql中的事务
    mysql的各种join连接
    java集合-LinkedList源码分析
    java集合(二)-ArrayList源码分析
    java集合(一)-集合概述
    java并发(五)-重排序、 happens-before
    vue引入百度地图 --BMap is not defined ,eslint BMap报错
    红星美凯龙前端面试内容总结
    vue父子组件钩子函数的执行顺序
  • 原文地址:https://www.cnblogs.com/supremeX/p/9786993.html
Copyright © 2020-2023  润新知