在C中查找递增顺序的最大子数组元素的总和?
我有一个名为sample.txt的文件,其中包含1000个整数(正数和负数)。 首先,我将文件复制到一个大小为1000的数组(例如a )。 我的目标是找到a中最大的子数组,并在其中找到元素的总和。 如果连续元素按升序排列,则数组是一个子数组。 例如在数组{12,23,3,1,-56,2,4,6,45,49,1,2,-10}中,子数组是{-56,2,4,6,45, 49}。 然后我需要计算这个子数组的元素总和。
下面给出的是我尝试使用C程序来解决问题。 本学期我是一名非CS专业的刚刚完成的C语言程序设计。 非常感谢您的帮助。
int sum(int a[],int i,int temp)
{
int sum=0,j;
for(j=i;j<i+temp;j++)
sum+=a[j];
printf("Sum = %d", sum);
return 0;
}
int main()
{
FILE *f1;
int a[1000],b[900];
int number,i=-1,counter=0,temp=1,check=1,j;
f1 = fopen("sample.txt","r");
while (!feof (f1) && fscanf (f1, "%d", &number) && i++ < 1000 )// copying the file to an array
a[i] = number;
fclose(f1);
for(i=1;i<1000;i++)
{
if(a[i-1]<a[i])
counter++;
else
{
if(counter>temp)
temp=counter;
counter=0;
}
}
temp++;
printf("Temp= %d", temp); // the length of the largest sub array whose elements are in increasing order
sum(a,i,temp);
return 0;
}
只是一般的建议,为了防止你的程序崩溃:
改变这个:
while (!feof (f1) && fscanf (f1, "%d", &number) && i++ < 1000 )
a[i] = number;
为此:
while (!feof (f1) && fscanf (f1, "%d", &number) && i < 1000 )
a[i++] = number;
那么,我来自C ++,但也许我可以帮助...你可以试试这个:
for(i=1;i<=1000;i++)
{
if(a[i]<a[i+1])
counter++;
我引入了一个新变量temp_index,它将保存最大子数组的起始索引,并使用j将起始索引存储在循环中。
尝试这个
if(a[i-1]<a[i])
{
if (counter == 0) { j = i }
counter++;
}
else
{
if(counter>temp) {
temp_index = j;
temp=counter;
}
counter=0;
}
}
temp++;
printf("Temp= %d", temp); // the length of the largest sub array whose elements are in increasing order
sum(a,temp_index,temp)
链接地址: http://www.djcxy.com/p/85941.html
上一篇: Finding the sum of elements of the largest sub array of increasing order in C?