我需要阅读以下单独的数组" MSS_TestProblems.txt":
[1, 4, -9, 8, 1, 3, 3, 1, -1, -4, -6, 2, 8, 19, -10, -11]
[2, 9, 8, 6, 5, -11, 9, -11, 7, 5, -1, -8, -3, 7, -2]
[10, -11, -1, -9, 33, -45, 23, 24, -1, -7, -8, 19]
[31,-41, 59, 26, -53, 58, 97, -93, -23, 84]
[3, 2, 1, 1, -8, 1, 1, 2, 3]
[12, 99, 99, -99, -27, 0, 0, 0, -3, 10]
[-2, 1, -3, 4, -1, 2, 1, -5, 4]
一旦我读完它们,我需要计算EACH数组的最大子阵列总和,并将结果输出为.txt文件,格式如下:
[1, 4, -9, 8, 1, 3, 3, 1, -1, -4, -6, 2, 8, 19, -10, -11]
[8, 1, 3, 3, 1, -1, -4, -6, 2, 8, 19]
34
[2, 9, 8, 6, 5, -11, 9, -11, 7, 5, -1, -8, -3, 7 -2]
[2, 9, 8, 6, 5]
30
[10, -11, -1, -9, 33, -45, 23, 24, -1, -7 -8, 19]
[23,24, -1, -7, -8, 19]
50
[31,-41, 59, 26, -53, 58, 97, -93, -23, 84]
[59, 26, -53, 58, 97]
187
[3, 2, 1, 1, -8, 1, 1, 2, 3]
[3, 2, 1, 1]
7
[12, 99, 99, -99, -27, 0, 0, 0, -3, 10]
[12, 99, 99]
210
[-2, 1, -3, 4, -1, 2, 1, -5, 4]
[4, -1, 2, 1]
6
我的问题是如何读取这些值,将它们放在数组中,并将它们传递给我的函数?如何将解决方案写入.txt文件?(以下是我的一个函数示例):
int iteration(int * Array1, int arraySize)
{
int maxSum = 0;
int start = 0;
int end = 0;
printArray(Array1, start, arraySize - 1);
for(int i = 0; i < arraySize; i++)
{
int sum = 0;
for(int j = i; j < arraySize; j++)
{
sum = sum + Array1[j];
if(sum > maxSum)
{
start = i;
end = j;
maxSum = sum;
}
}
}
printArray(Array1, start ,end);
return maxSum;
}
答案 0 :(得分:0)
打印阵列很简单:
void arr_print(FILE *f, const int arr[], size_t n)
{
fputs("[", f);
for (size_t i = 0; i < n; i++) {
if (i) fputs(", ", f);
fprintf(f, "%d", arr[i]);
}
fputs("]\n", f);
}
扫描更复杂。您可以使用strtol
读取数字并手动解析其余语法,即括号和逗号。下面的函数执行此操作并使用大多数max
元素填充数组。它返回列表中元素的数量,最大值大于max
,或者出错时为-1:
int arr_scan(const char *str, int arr[], size_t max)
{
size_t n = 0;
// parse opening bracket
while (*str == ' ') str++;
if (*str != '[') return -1;
str++;
for (;;) {
char *tail;
long x;
// scan number
x = strtol(str, &tail, 0);
if (tail == str) return -1;
// fill array
if (n < max) arr[n] = x;
n++;
// parse comma or closing bracket
str = tail;
while (*str == ' ') str++;
if (*str == ']') break;
if (*str != ',') return -1;
str++;
}
return n;
}
逐行阅读您的输入行fgets
并使用arr_scan
进行扫描。如果要打印子阵列,请使用指针算法:
arr_print(arr + start, end - start);