标签:源代码 cell += array nta if语句 解决方案 ase help
一。实验要求
1.输入一个整型数组,数组里有正数也有负数,数组中一个或多个整数组成一个整数组,每个子数组都有一个和。
2.数组可以首位相连,允许A【i-1】,....,A[n-2],A[0]........A[j-1]和最大
3.返回最大子数组的位置,求最大子数组的和.
二、实验思路
循环数组,也就是最后一个数组值和第一个数组值相连,整个子数组可以从任何一个整数开始遍历求出所有的子数组,参考前面数组的设计思想,有二种可能的解决方案。
1.对数组内的每一个数都进行遍历,然后遍历以他们为起点,长度最大为数组长度的所有子数组,比较各个子数组的大小,求出最大子数组的和。
2.从头开始遍历,遍历到数组A【i】时,最大子数组的值可能是max+A【i】,也可能为A【i】,做出比较,取最大值.
我们选择了第一种解决方案,遍历所有的子数组求出最大值,因为是循环数组,所以从每一个数开始遍历其最长子数组的长度都是数组的长度,所以我们将数组通过if循环,赋值给长度为数组长度2n-1的新数组,设施遍历长度为n,遍历出所有子数组,求出最大值.
三。实验人员:
袁凤隆 杨子浩
四。实验源代码
| 
 1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 
27 
28 
29 
30 
31 
32 
33 
34 
35 
36 
37 
38 
39 
40 
41 
42 
43 
44 
45 
46 
47 
48 
49 
50 
51 
52 
53 
54 
55 
56 
57 
58 
59 
60 
61 
62 
63 
64 
65 
66 
67 
68 
69 
70 
71 
72 
73 
74 
75 
76 
77 
78 
79 
80 
81 
82 
83 
 | 
#include<stdio.h>#include<stdlib.h>#include<time.h>int main(){    int i,d,m,a,h,l,p;    int max=0;    int b=0;    int c [10];    int n [19];    srand(time(NULL));    for(i=0;i<10;i++)    {        d=rand()%2;        if(d==0)        {            c[i]=rand()%10;        }        else        {            c[i]=-rand()%10;        }        printf("%d  ",c[i]);    }    printf("\n  ");    for(m=0;m<19;m++)    {        if(m<10)        {            n [m]=c [m];        }        else        {            n [m]=c [m-10];        }        printf("%d  ",n[m]);    }    for(m=0;m<10;m++)    {        for (i=m;i<(10+m);i++)        {            for(a=i;a<(10+i);a++)            {                d=0;                for(h=i;h<=a;h++)                {                    d+=n[h];                    if(d>max)                    {                    max=d;                    l=i;                    p=a;                    }                }            }        }    }        if(max==0)        {            max=c[0];            for(i=0;i<10;i++)            {                if(max<c[i])                {                    max=c[i];                    l=p=i;                }            }        }         if(max>2147483647)        printf("piease atart again\n");    printf("\n");    printf("maximum array is=%d\n",max);    printf("最大子数组为\n");    for(i=l;i<=p;i++)    {        printf("  %d   ",n[i]);    }    return 0;} | 
五。实验结果图片


六。实验总结。
通过本次实验深刻的理解实验思路和将问题降维的重要性,将数组重新存储是想通过两个循环实现,最后发现一个if语句就可以实现,真的是太重要,期待下次实验
标签:源代码 cell += array nta if语句 解决方案 ase help
原文地址:https://www.cnblogs.com/yzhztoutlook/p/9904640.html