• 数组题目小计(4)


    小伙伴博客链接:http://www.cnblogs.com/ly199553/p/5322647.html

    照例:

    工作照

    由于本次难度相对较易,所以没有采取分组形式,进行迭代开发时会选取较为方便的一个

    在上次的基础上,又增加了求首尾相连的子数组最大和的功能,主要思路是将除了原数组最后一个元素外的数字复制到原数组后的空间,然后从第一个元素到最后一个元素依次当起始元素,找出最大值依次存入一个数组,求出数组的最大值即为原可首尾相连数组的最大值,例如:10 -10 5 -1 将10 -10 5 复制至后面得10 -10 5 -1 10 -10 5,然后规定起始元素依次为10 -10 5 -1,数组长度为4

    代码如下:

     1 #include<iostream>
     2 using namespace std;
     3 int Max(int i, int a[100], int num);
     4 int Max_num(int i, int a[100], int num, int b[100]);
     5 int main()
     6 {
     7     cout << "请输入数组元素个数:";
     8     int num;
     9     cin >> num;
    10     cout << "请输入数组:";
    11     int array[100],i;
    12     for (i = 0; i < num;i++)
    13         cin >> array[i];
    14     int max = array[0];
    15     int m[100];//存放最大值的数组
    16     int sum = 0;//存放累加和
    17     //复制除最后元素的一个数组放到数组后的空间
    18     for (int k = 0; k < num; k++)
    19     {
    20         array[k + num] = array[k];
    21     }
    22     //最大值大于0
    23     for (i = 0; i < num; i++)//设定起始元素
    24     {
    25         sum = 0;
    26         for (int q = i; q < i + num; q++)//以起始元素为头的规定元素数的数组
    27         {
    28             sum = sum + array[q];
    29             if (sum > max)
    30                 max = sum;
    31             if (sum < 0)
    32                 sum = 0;
    33             if (max == 0)
    34             {
    35                 sum = sum + array[q];
    36                 if (sum > max)
    37                     max = sum;
    38             }
    39             m[i] = max;
    40         }    
    41     }
    42         cout << "子数组最大的和为:"<<Max(i, m, num)<<endl;
    43         cout << "最大子数组的起始元素为第";
    44         cout<< Max_num(i, m, num, array);
    45         cout << "个元素"<< endl;
    46 }
    47 //求最大值数组中的最大值
    48 int Max(int i, int a[100], int num)
    49 {
    50     int max = a[0];
    51     for (i = 0; i < num ; i++)
    52     {
    53         if (a[i] > max)
    54             max = a[i];
    55     }
    56     return max;
    57 }
    58 
    59 //返回最大子数组和起始元素位置
    60 int Max_num(int i, int a[100], int num,int b[100])
    61 {
    62     int max = a[0], m_num=0;
    63     for (i = 0; i < num; i++)
    64     {
    65         if (a[i] > max)
    66         {
    67             max = a[i];
    68             m_num = i;
    69             if (b[m_num] < 0)//如果起始元素为负数,则向后移一个
    70                 m_num = m_num + 1;
    71         }
    72     }
    73     return m_num+1;//使从0开始到从1开始
    74 }

    测试结果:

  • 相关阅读:
    关于html元素Css样式设置的一点心得(特别是与位置有关的,还有外边距、内边距有关的那些)
    【idea的一个安装细节】是不是使用idea不能连接网络了?
    html中a标签属性parent和self的举例说明
    关于jquery的each的操作;
    superagent中文文档
    mongoose 查询子文档的方法
    Object.prototype.toString.call()进行类型判断
    局部函数的直接引用与调用
    数据模型中某个字段是单选或者多选的定义方式;
    nodejs项目中的路由写法
  • 原文地址:https://www.cnblogs.com/brucekun/p/5321247.html
Copyright © 2020-2023  润新知