题目:
为什么我的代码和题解的代码,没有什么不同的地方,但是我的代码一个测试点都通不过?
题解代码:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int pp(long long int a[],int low,int high)
{
int n = high;long long int m;
m=a[low];//用第一个记录做中间
while(low<high)
{
while(low<high && a[high]>=m) --high;//如果high指针位置>=中间数,直到high位置<中间
a[low]=a[high];//因为上面循环high指针位置<中间,所以把high位置放到low位置
while (low<high && a[low]<=m) ++low;//如果low指针位置<=中间数,直到high位置>中间
a[high]=a[low];
}
a[low]=m;
return low;
}
int p;
void Qsort(long long int a[],int low,int high)
{
if(low<high)
{
p=pp(a,low,high);
Qsort(a,low,p-1);
Qsort(a,p+1,high);
}
}
int main(int argc, char *argv[])
{
// 请在此输入您的代码
int n,i;double k,avg1,avg,sum=0.0;
long long a[500010];
scanf("%d %lf",&n,&k);
for(i=0;i<n;i++)
{
scanf("%lld",a+i);
}
avg1=avg=1.0*k/n;
Qsort(a,0,n-1);
for(i = 0 ; i < n ; i++)
if( a[i] * (n-i) < k )
{
sum+=(a[i]-avg1)*(a[i]-avg1);
k-=a[i];
}
else
{
avg=k/(n-i);
sum+=(avg-avg1)*(avg-avg1)*(n-i);
break;
}
sum=sqrt(sum/n);
printf("%.4lf",sum);
return 0;
}
我的代码:
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
long long a[500010];
int compare(const void *a,const void *b)
{
return *(int *)a-*(int *)b;
}
int main()
{
int n,i;
double s;
double sum=0.0;//这个sum求的是方差
scanf("%d%lf",&n,&s);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
int size=sizeof(a)/sizeof(a[0]);
qsort(a,size,sizeof(a[0]),compare);
double ave=1.0*s/n;
for(i=0;i<n;i++)
{ //if和else同时也划分了前半段和后半段
if(a[i]*(n-i)<s)
{
sum=sum+(a[i]-ave)*(a[i]-ave);
s=s-a[i];
}
else
{
double nave=s*1.0/(n-i); //注意:这里的i是新加过的,这个是新的平均数,用小数保证精度不会丢失,而且个数要改变,前面的人全出,后面的人肯定都是出得起的
sum+=(nave-ave)*(nave-ave)*(n-i);
break; //记得要break;出来,现在的结果是对的
}
}
printf("%.4f",sqrt(sum/4));
}
为什么我的代码和题解的代码,没有什么不同的地方,但是我的代码一个测试点都通不过?寻求帮助,谢谢