#include<stdlib.h>
void water(float k,int i,int j, float *a)
{
int index=0,row,col;
a[index]=k;
if(j>i)
{
printf("-1\n");
return;
}
for(row=1;row<=i;row++)
{
for(col=1;col<=row;col++,index++)
{
k=a[index];
if(k>=1)
a[index]=1;
else a[index]=k;
if(k>=1)
k=k-1;
else k=0;
a[index+row]=a[index+row]+k/2;
a[index+row+1]=k/2+a[index+row+1];
}
}
printf("%lf\n",a[i*(i-1)/2+j-1]);
}
int main() {
//code
int t,i,j;
float k;
scanf("%d",&t);
while(t--)
{
scanf("%f",&k);
scanf("%d",&i);
scanf("%d",&j);
double *a;
a=(double*) (malloc(sizeof(double)*(i*(i+1)/2)));
for(int p=0;p<(i*(i+1)/2);p++)
a[p]=0;
water(k,i,j,a);
free(a);
}
return 0;
} 在上面的程序中,我最初声明了类型为main的数组a 浮动。但是正在打印的结果不正确。然后我改变了 键入double即可正常工作。但是我无法完全 理解为什么浮动大小不起作用而是双重作用。有人可以吗 帮助我吗?