result DoubleLoop(double* p, int length) { double max = 0; int start = 0, end = 0; for (int i = 0; i < length; i++) { double sum = *(p + i); if (max < sum) { max = sum; start = i; end = i; } for (int j = i + 1; j < length; j++) { sum = sum + *(p + j); if (max < sum) { max = sum; start = i; end = j; } } } result MyResult; MyResult.value = max; MyResult.start_num = start; MyResult.end_num = end; return MyResult; }
typedef struct result { int start_num; int end_num; double value; };
clock_t time_start, time_finish;
// [a,b]范围内随机数,最多bit位小数 void init(double*p, int a, int b, int bit) { srand(time(nullptr)); for (int i = 0; i < LENGTH; i++) { int temp_front, temp_back; temp_front = a + rand() % (b - a + 1); // 小数点前 temp_back = rand() % (int)pow(10, bit); *(p+i) = (double)(temp_front) +((double)temp_back * (double)pow(10, -bit)); } }
result TripleLoop(double*p, int length) { double max = 0; int start = 0, end = 0; for (int i = 0; i < length; i++) { for (int j = i; j < length; j++) { double temp = 0; for (int k = i; k < j; k++) { temp = temp + *(p + k); } if (temp > max) { max = temp; start = i; end = j-1; } } } result MyResult; MyResult.value = max; MyResult.start_num = start; MyResult.end_num = end; return MyResult; }
result DoubleLoop(double* p, int length) { double max = 0; int start = 0, end = 0; for (int i = 0; i < length; i++) { double sum = *(p + i); if (max < sum) { max = sum; start = i; end = i; } for (int j = i + 1; j < length; j++) { sum = sum + *(p + j); if (max < sum) { max = sum; start = i; end = j; } } } result MyResult; MyResult.value = max; MyResult.start_num = start; MyResult.end_num = end; return MyResult; }