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

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

实验要求:必须能处理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("数组元素不能为空,请重新输入!\n");
                                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("请输入数组的个数:\n");
                                   scanf("%d",&n);   
                                      if(n>0)
                                     {
                                                   printf("请输入数组元素:\n");
                                                   for(i=0;i<n;i++)
                                                         {
                                                               scanf("%d",&a[i]);
                                                          }
                                                                 max=Largest(a,n);
                                                             printf("数组元素的最大值是:%d\n",max);
                                      }
                                       else
                                      {
                                                 printf("数组不能为空,请重新输入!\n");
                                                 goto in;       
                                              }
                                                     return 0;
                                     }

测试截图:

原文地址:https://www.cnblogs.com/supremeX/p/9786993.html

时间: 2024-11-05 11:24:17

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

linux 让一个程序开机自启动并把一个程序加为服务

本文以tomcat7为例 首先找到tomcat启动的目录,我的为 cd /usr/local/tomcat7/bin/ 这个目录 启动脚本是startup.sh 然后在/etc/rc.d/rc.local 这个文件中将tomcat的启动脚本添加进来即可. 重启操作系统,发现tomcat7可以开机自启动了. 将tomcat添加为服务 将 /usr/local/tomcat7/bin/catalina.sh 这个文件拷贝到 /etc/rc.d/init.d 这个目录并重命名为tomcat 使用命令

返回一个整数数组最大子数的和

题目要求:返回一个整数数组最大子数的和 题目分析:通过累加,加上一个数看它的值得大小来解决问题 原文地址:https://www.cnblogs.com/yzhztoutlook/p/9769929.html

返回一维整数数组中最大子数组的和

1.要求:(1)输入一个整形数组,数组里有正数也有负数.(2)数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和.(3)如果数组A[0]--A[j-1]首尾相邻,允许A[i-1], -- A[n-1], A[0]--A[j-1]之和最大.(4)同时返回最大子数组的位置.(5)求所有子数组的和的最大值.要求时间复杂度为O(n). 2.设计思想 : 通过更改数组的长度将数组拟合成一个循环数组,将普通的一维数组A[n]的前n-1位数组数加到数组A[n]后面组成一个新的数组A[2n-1],再

一个程序员想出了一个有趣的方式来关闭危险的Windows的骗子

你有没有在网上时,一个窗口弹出说你的电脑有病毒,并敦促你打电话给微软支持(或苹果支持)提供的号码?古董鉴定这是一个支持骗局,微软说,它真的试图欺骗你下载恶意软件,或交出你的信用卡信息-或两者.现在一个电信程序员职业已经想出了一个绝妙的,热闹,把这些骗子离线,可能的话,把他们的生意好.Roger Anderson,一个电信顾问和快乐的罗杰电话公司的老板,建立人类探测机器人停止骚扰电话手机从住所或者经营一个军队.这不是他的主要工作,他做为顾问设计电信系统他的生活.他建造的机器人军队的电话后称他的房子

返回一个整数数组最大子数和。(新)

一.要求: (1)输入一个整形数组,数组里有正数也有负数. (2)数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. (3)如果数组A[0]--A[j-1]首尾相邻,允许A[i-1],......A[n-1], A[0]--A[j-1]之和最大. 二.设计思想: 如果数组首尾相连,那么每一个元素都可以当成是开头即从A[n]开始,到A[n-1]结束,这样的话,就相当用剪子在一开始的数组中的元素的前一位剪开.这样的话,可以建立新的三个数组,前两个数组分别盛放剪开的两部分,第三个数组则是

从一个程序跳转到另一个应用程序

NSString *url = @"MyUrl://";    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:url]]; 在另一个应用程序中按照上边的操作添加MyUrl并运行,就可以跳转了

6.用java和javascript写一个程序,每秒打印一个数字,打印出1-10

<script type="text/javascript"> var n=1; function start() { timename=setInterval("set()",1000); } function set(){ document.getElementsByTagName("p")[0].innerHTML =n++; if(n==11){ clearInterval(timename); } } </script

编这样一个程序,用户输入10个整数,程序找出其中的最大值和最小值

#include<stdio.h> #include<string.h> int main() { char arr[10]={8,12,14,12,12,15,15,5,6,7}; char arr1[10]={8,12,14,12,12,15,15,5,6,7}; int max; int min; int i,j,k; for(i=0;i<9;i++) { j=i+1; if(arr[i]>arr[j]) { max=arr[i]; arr[j]=arr[i];

设计一个程序能够将某一个目录下面的所有文件名打印出来---File类的使用

,设计一个程序能够将某一个目录下面的所有文件名打印出来 运用到的方法有:返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录:list()           测试此抽象路径名表示的文件是否是一个目录:isDirectory()           返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件:listFiles() package printfilename; import java.io.File; public class PrintFileNam