课堂实验4.1(环数组)

题目:

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

要求:

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

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

如果数组A[0]……A[j-1]首尾相邻,允许A[i-1],…… A[n-1],A[0]……A[j-1]之和最大。

同时返回最大子数组的位置。 求所有子数组的和的最大值。

设计思想:

这是一个迭代的开发,是从上一个任务中的基础上进行的,在上一个的程序加上一个功能,就是将环形数组分成N个子数组,环形数组的每一个数字都可以作为每个数组的第一个数,然后按顺序排列,求出每个数组中最大子数组的结果,相比较求出最大值。其中环形数组的实现可以利用数据结构的联表进行实现。

代码:

#include<iostream>
using namespace std;
#define N 100

int shuzu(int h,int array2[N])
{
    int i;
    int h1;
    h1=h;
    int array3[N];
    array3[0]=array2[0];
    int maxsize=array3[0];

    for(int e=0;e<=h-1;e++)
    {
        array3[e]=array2[e];
        maxsize=array3[e];
        for(i=e+1;i<=h1;i++)
        {

        if(array3[i-1]>0)
        {
            array3[i]=array3[i-1]+array2[i];
            maxsize=max(maxsize,array3[i-1]);

        }
        else
        {
            array3[i]=array2[i];

        }
        }
        array2[h1]=array2[e];
        h1=h1+1;

        }

    cout<<"子数组最大为:"<<maxsize;
    cout<<"数组为:"<<endl;
       return 0;
}
int main()
{
    int i,j;
    cout<<"请输入环形数组大小:(1-10)"<<endl;
    cin>>j;

    int array1[N];

    cout<<"请输入"<<j<<"个数:"<<endl;

    for(i=0;i<j;i++)
    {
        cin>>array1[i];
    }
    shuzu(j,array1);

    return 0;
}

队友唐野野地址:http://www.cnblogs.com/tyyhph/

时间: 2024-11-06 15:16:22

课堂实验4.1(环数组)的相关文章

一维回环数组求解最大子数组问题

一.题目与要求 题目:返回一个整数数组中最大子数组的和. 要求: 输入一个整形数组,数组里有正数也有负数. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 如果数组A[0]……A[j-1]首尾相邻,允许A[i-1], …… A[n-1], A[0]……A[j-1]之和最大. 同时返回最大子数组的位置. 求所有子数组的和的最大值.要求时间复杂度为O(n) 二.设计思想 通过上次求解简单一维数组的最大子数组问题的解决,我们找到了一种实现时间复杂为O(n)的方法,采用的是二分法和递归

软件工程课堂训练——结对开发之环数组最大和

一.题目及要求: 题目:返回一个整数数组中最大子数组的和 要求(新加):①如果数组A[0]...A[j-1]首尾相邻,允许A[i-1]...A[n-1],A[0]...A[j-1]之和最大:②同时返回最大子数组的位置. 结对人员:胡亚宝  焦燕 二.设计思路: 我们要解决两个问题:求出环数组中最大的子数组:并且定位出该子数组的位置,把它们的名称输出来.要解决这两个问题,我们从以下两个方面入手: ①求出最大子数组:将数组数值按顺序排好称为“一趟”,每求出一趟的最大子数组后,将第一个数值放到最后一个

实验八:一维数组的应用

一.实验内容 1.输入10个学生的分数,输出其总分和平均分.要求用数组实现. 2.顺序查找法.输入5个整数,将它们存入数组a中,再输入一个数x,然后在数组中查找x,如果找到,输出相应的最小下标,否则,输出"Not Found". 3.求最大值及其下标.输入一个正整数n(1<n≤10), 再输入n个整数, 输出最大值和它所对应的下标. 4.输入一个正整数n (1<n≤10),再输入n个整数,用选择法将它们从大到小排序后输出. 5.找出两个数组共有的元素.输入一个正整数n(1&

【日常学习】【SPFA负环+数组模拟链表实现】codevs2645 Spore题解

之前刚刚写了一道"香甜的黄油",是USACO的经典题目了.那道题用SPFA怎么找都过不了,看着别人的PAS轻松过各种拙计.黄学长说最佳方案应当是堆优化的dij,我还没有血,等学了那个之后再写黄油题解吧. 题目: 题目描述 Description 在星系1 的某颗美丽的行星之上.某陈将去标号为N 的星系,从星系g1 到达g2,某陈需要花费c1 的代价[主要是燃料,另外还有与沿途Grox 的势力作战的花费],c1 小于0 则是因为 这样的星系旅行,会给某陈带来收益[来源于物流差价,以及一些

大学实验4:利用数组表示法建立无向网

实验目的:深入理解图的邻接矩阵存储结构 实验内容: 已知某无向网如图所示,要求利用数组表示法建立该网. 基本思想:编写两个功能函数,一个负责建立无向网的邻接矩阵存储结构,另一个负责对无向网的打印输出. 步骤1:引入必要的函数库 1 #include <stdio.h> 2 #include <stdlib.h> 步骤2:定义常量 /*定义最大的顶点个数*/ #define MAX_VERTEX_NUM 100 /*定义常量INFINITY,该常量表示两个顶点间没有边相关联*/ #d

结对开发--求环数组的最大字数组

一.题目要求 题目:返回一个整数数组中最大子数组的和. 要求: 输入一个整形数组,数组里有正数也有负数. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 如 果数组A[0]……A[j-1]首尾相邻,允许A[i-1], …… A[n-1], A[0]……A[j-1]之和最大. 同时返回最大子数组的位置. 求所有子数组的和的最大值.要求时间复杂度为O(n). 二.设计思路 这次的主要问题在于这次的一位数组要首尾相连,允许A[i-1], …… A[n-1], A[0]……A[j-1]

环数组求最大子数组的和

在结对开发的过程中,每个人分担不同的任务,由于我们在学习阶段,所以我自己也编写了一段小程序,但是总是缺少一个限制条件,让这段代码停下来,下面这段代码是我的同伴编写的,我只是做了一个测试. #include<iostream> using namespace std; void main() { int length; //数组的个数 int n; //数组变化后的长度 cout<<"请输入数组元素个数:"<<endl; cin>>leng

环数组的最大子数组的和

一.题目要求 题目:返回一个整数数组中最大子数组的和. 要求: 输入一个整形数组,数组里有正数也有负数. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 如果数组A[0]……A[j-1]首尾相邻,允许A[i-1], …… A[n-1], A[0]……A[j-1]之和最大. 同时返回最大子数组的位置. 求所有子数组的和的最大值.要求时间复杂度为O(n). 二.设计思想 把数组每一位向后移动一位,最后一位放在第一位.循环多次,每次求其最大子数组,存放到新数组内,比较新数组中最大数,

实验七 c字符数组和字符串函数

7.1 #include<stdio.h>#include<string.h> int main(){ char a[40]; int i; gets(a); //输入字符串进入数组 for(i=0;i<strlen(a);i++) { if(a[i]>='a'&&a[i]<='z') a[i]-=32; } puts(a); printf("\n"); return 0;} 7.2 #include<stdio.h>