现在这个运行时间太长,显示超时,有没有缩短时间的改法,请把改好的发一下,要求为c语言

int main(void)
{
long long int i,j,N;
float a,b=10000,c,d=0;
float e[100001];

   scanf("%lld",&N);
for(i=1;i<=N;i++)
{
    scanf("%f",&e[i]);
    d+=e[i];
}
for(i=2;i<=N;i++)
{
    a=0;
    for(j=i;j<N;j++)
    {
        a+=e[j];
        c=(d-a)/(float)(N-(j+1-i));
        if(b>c)
        {
            b=c;
        }

    }
}
printf("%.3f",b);
return 0;

}

img

循环的起始下标改为从0开始,另外你定义的a值是一个未知数,根据你题目的要求自己把a得值赋值给a。

楼主,请您把原题或者关于原题的简短描述发一下,我希望能为您解决问题,谢谢!

#include <stdio.h>
#define MAX 100000
int main(void){
    unsigned int N=0;
    scanf("%u",&N);
    unsigned int p[MAX]={0};
    double minAV,cutAV;
    unsigned long long sum=0,csum=0;
    unsigned int i,j,n;
    for(i=0;i<N;i++){
        scanf("%d",&p[i]);
        sum=sum+p[i];
    }
    minAV=((double)sum)/N;
    for(i=1;i<N-1;i++){
        csum=0;
        for(j=i;j<N-1;j++){
            csum=csum+p[j];
            n=(N-(j-i)-1);
            cutAV= ((double)(sum-csum))/n;
            if(cutAV<minAV) {
                minAV=cutAV;
            }
        }
    }
    printf("%.3f\n",minAV);
    return 0;
} 

分治算法 缩小问题规模

或者试试贪心能否求解

unsigned int p[MAX]={0};
应改为
static unsigned int p[MAX]={0};
在占用内存空间较大的局部数组声明的前面加static将其从堆栈数据段挪到全局数据段即可避开因局部数组大小超过默认堆栈大小1MB造成程序不能正常运行的问题。

#include<stdio.h>
#include<stdlib.h>
int count=2;
void QuickSort(float t[],int Begin,int End)
{
    if(Begin>=End) return;
    int Left=Begin,Right=End;
    float tem=t[Begin];
    while(Begin<End)
    {
        while(Begin<End&&t[End]>=tem)
        {
            End--;
        }
        t[Begin]=t[End];
        while(Begin<End&&t[Begin]<=tem)
        {
            Begin++;
        }
        t[End]=t[Begin];
    }
    t[Begin]=tem;
    QuickSort(t,Left,Begin-1);
    QuickSort(t,Begin+1,Right);
}
float cacluave(float t[],int pn,float base)
{
    float sum=0;
    count=2;
    for(int i=1; i<=pn; i++)
    {
            sum+=t[i];
            count++;
    }
    return (sum+base)/count;
}
void randnum(float t[],int n)
{
    for(int i=0; i<n; i++)
    {
        t[i]=rand()%n;
    }
}
int main()
{
    float t[100000];
    int n;
    scanf("%d",&n);
    //randnum(t,n);
    for(int i=0; i<n; i++)
        scanf("%f",&t[i]);
    
    float base=t[0]+t[n-1];
    QuickSort(t,1,n-2); 
    float min=(t[1]+base)/2;
    int pos=0;
    for(int i=n-2; i>=1; i--)
    {
        float tem=cacluave(t,i,base);
        if(tem<min)
        {
            min=tem;
            pos=count;
            //printf("%d",count);
        }
    }
    if(pos==n)
    {
        min=cacluave(t,n-3,base);
    }
    printf("%.3f",min);
    return 0;
}

这是在干啥,a都没赋值
这玩意能跑出结果来就是奇迹了

代码是实现什么

还不如直接贴问题

将float e[100001];改为float e[N];

long long int i,j,N;
float a,b=10000,c,d=0;
float e[100001];
这三行放到main()前面