要求:
输入一个整形数组,数组里有整数也有负数。
数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
如果数组A[0]……A[j-1]首尾相邻,允许A[i-1],……A[n-1],A[0]……A[j-1]之和最大。
同时返回最大子数组的位置。
求所有子数组的和的最大值。
思路:循环两次,进行排除法,判断数组中每个数所构成的最大子数组,然后将数组中每个数对应的最大子数组进行判断,最后得到这个整数数组的最大子数组。
#include<iostream> #define n 100 using namespace std; void main() { int a[n], b[n][n]; int length, i, j, w = 0, p = 0, q = 0, temp, m; cout << "输入整数数组" << endl; for (length = 0;;) { cin >> a[length]; length++; if (getchar() == ‘\n‘) { break; } } cout << "这个整数数组的长度为:" << length << endl; for (i = 0; i<length; i++)//循环两次,进行排除法,判断数组中每个数所构成的最大子数组 { m = i; w = 0; j = 0; while (j <= length - 1) { w += a[m]; b[i][j] = w; m++; if (m>length - 1) { m = 0; } j++; } } temp = b[0][0]; for (i = 0; i<length; i++)//将数组中每个数对应的最大子数组进行判断,最后得到这个整数数组的最大子数组 { for (j = 0; j<length; j++) { if (b[i][j]>temp) { temp = b[i][j]; p = i; q = j; } } } cout << "最大子数组的值为:" << temp << endl; cout << "最大子数组的元素的位置:" << endl; i = 0; while (i <= q) { cout << p << " "; p++; if (p >= length) { p = 0; } i++; } cout << endl; system("pause"); }
原文地址:https://www.cnblogs.com/zjk0109/p/9904229.html
时间: 2024-11-13 08:03:33