zoukankan      html  css  js  c++  java
  • 个人作业十六:找水王

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

    一、设计思路

    (1)数据的存储结构是链表,最后一个结点的next指向第一个元素的结点;

    (2)数据个数为n,则最多有n*(n+(n-1)+...+1)种情况(包括重复);

    (3)剩下的部分与二维数组的差不多。

    二、源代码

    // 一维数组.cpp : Defines the entry point for the console application.

    // 袁佩佩 于海洋

    #include "stdafx.h"

    #include<iostream.h>

    #define num 5

    /*链表数据结构*/

    typedef struct LNode

    {

        int data;

        struct LNode *next;

    }LNode,*LinkList;

    /*链表的初始化*/

    void InitList(LinkList &L)

    {

        L=new LNode;

        L->next=NULL;

    }

    /*链表数据的插入*/

    void InsertList(LinkList &L)//建立循环链表

    {

        LNode *head,*temp;

        head=L;

        cout<<"请输入"<<num<<"个数字:";

        for(int i=0;i<num;i++)

        {

            temp=new LNode;

            cin>>temp->data;

            temp->next=NULL;

            head->next=temp;

            head=head->next;

        }

        head->next=L->next;                //首尾相连,建立循环链表

    }

    void output(LinkList L)

    {

        for(int i=0;i<num;i++)

        {

            cout<<L->next->data<<" ";

            L=L->next;

        }

    }

    int main( )

    {

        int max,sum,flag=0;                //sum是字数组的和,max是最大的子数组的和

        int ordern=0,orderx=0;

        LinkList L;

        LNode *temp,*temp1,*temp2,*head;

        InitList(L);

        InsertList(L);                    //由用户往链表中插入数据

        temp=L->next;

        max=L->next->data;                //max初值是链表中第一个数

        for(int i=0;i<num;i++,temp=temp->next)

        {

            temp2=temp;

            for(int j=0;j<num;j++,temp2=temp2->next)

            {

                for(int k=j;k<num;k++)

                {

                    sum=0;

                    temp1=temp2;

                    for(int h=j;h<=k;h++,temp1=temp1->next)

                    {

                         sum=sum+temp1->data;

                    }

                     if(max<sum)        //将最大值赋给max,并且保存当时的序号 

                     {

                         max=sum;

                         ordern=j;

                         orderx=k;

                         head=temp;

                         flag=i;        //用来求取最大值的时候的链表的情况

                     }

                }

            }

        }

        temp=L->next;

        cout<<"最大字数组是:";

        for(i=0;i<(flag+ordern);i++)    //找出取得最大值的时候的子数组的第一个数

        {

            temp=temp->next;

        }

        for(int j=0;j<(orderx-ordern+1);j++,temp=temp->next)//将取得最大和的子数组元素输出

        {

            cout<<temp->data<<"  ";

        }

        cout<<endl<<"最大子数组的和是:"<<max<<endl;;

        return 0;

    三、运行截图

                           

    四、心得体会

      这次最大的感受就是,我们两个都有各自的思路想法,都想向对方阐述自己的想法,导致无法很好地接受倾听对方的声音。我觉得他的方法浪费内存空间,他认为他 的查找过程清晰明了。最终还是于海洋同学妥协了,采用的是我的思路,用循环链表。开发过程还是像上两次差不多,个人有个人的优缺点,可以相互弥补。调试程 序时,也是我俩共同协作排查出了错误。

  • 相关阅读:
    erlang中变量作用域
    erlang数字转字符串
    gen_server笔记
    Using Eredis, Redis With Erlang
    erlang lists模块函数使用大全
    erlang抽象码与basho的protobuf
    Erlang Module and Function
    Erlang中频繁发送远程消息要注意的问题
    Erlang中的record与宏
    数据结构之数羊问题
  • 原文地址:https://www.cnblogs.com/lrhan/p/5609655.html
Copyright © 2011-2022 走看看