标签:
一、设计思想:
首先要随机生成一定的随机数,然后通过对数组赋值,再求出子数组之和,比较哪个数组之和最大,如果为负值即取消赋值,在这个基础之上,重新算出最大子数组之和,最后输出最大和以及最大子数组。
二、源代码:
#include<iostream>
#include<ctime>
#include<stdlib.h>
using namespace std;
void main()
{
        int begin=0; //子序列的开头
        int end=0; //子序列的结尾
        int newsum=0; //当前子序列最大值
        srand((unsigned)time(NULL)); //生成随机数
        int a[10000], n;
        cout << "请输入数组里面包含数的个数:" << endl;
        cin >> n;
        for (int i = 0; i < n; i++)
        {
             a[i] = rand() % 100-50;
         } // 随机生成100以内的数组的值
       int maxsum=a[0];
       cout << "数组a[" << n << "]为:";
       for (int i = 0; i < n; i++)
       {
           cout << a[i] << " ";
       }
       cout << endl;
       for (int i = 0; i<n; i++)//开始循环求子序列和
      {
          newsum = newsum + a[i];
          if (newsum > maxsum)//更新当前子序列的和
          {
              maxsum = newsum;
              end = i;
          }
         if (newsum < 0)//假若当前子序列和为负,则舍弃
         {
             begin = i + 1;
             newsum = 0;
          }
      }
      cout << "最大的子序列和为:" << maxsum << endl;
      cout << "最大的序列为:";
      for (int k = begin; k <= end; k++)
      {
          cout << a[k] << " ";
       }
      cout << endl;
}
三、出现的问题:
这次的实验代码跟上次的一样,只是测试数据的时候出现了些许问题。
四、实验截图:



五、实验总结:通过这次的跟同学合组完成的实验,也促使我完成了这一阶段,跟同学之间好好配合很重要,我跟刘伯建一块完成的这项实验同时也有一定的乐趣。下面是我跟他的合照

标签:
原文地址:http://www.cnblogs.com/itlangguojie/p/4385382.html