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;
}
循环的起始下标改为从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()前面