#include<stdio.h> #include<stdlib.h> struct mooncake{ double number; double price; double value; }; void swap(int a[],int i,int j) { int t; t=a[i]; a[i]=a[j]; a[j]=t; } int p(int a[],int m,int n){ int x,i,j; x=a[m]; i=m; for(j=m+1;j<=n;j++){ if(a[j]<=x){ i++; swap(a,i,j); } } swap(a,m,i); return i; } void q(int a[],int m,int n){ int r; if(m<n){ r=p(a,m,n); q(a,m,r-1); q(a,r+1,n); } } int main() { int n,i,k=0; double d,value=0; while(scanf("%d%lf",&n,&d)!=EOF){ struct mooncake m[n]; for(i=0;i<n;i++){ scanf("%lf",&m[i].number); } for(i=0;i<n;i++){ scanf("%lf",&m[i].price); m[i].value=m[i].price/m[i].number; } q(m,0,n-1); while(m[k].number<d&&k<n){ d=d-m[k].number; value=value+m[k].price; k++; } if(d>0){ value=value+(d/m[k].number)*m[k].price; } printf("%.2lf\n",value); } }帮我检查哪里出错了
时间: 2023-06-27 09:03:59 浏览: 66
您的代码有一个错误,在定义结构体数组时,数组的大小必须是常量,不能是变量n,因为在编译时无法确定n的值。您可以使用动态内存分配来解决这个问题。请参考以下修改建议:
```c
#include<stdio.h>
#include<stdlib.h>
struct mooncake{
double number;
double price;
double value;
};
void swap(struct mooncake a[],int i,int j) {
struct mooncake t = a[i];
a[i] = a[j];
a[j] = t;
}
int p(struct mooncake a[],int m,int n){
struct mooncake x = a[m];
int i = m;
for(int j = m + 1; j <= n; j++){
if(a[j].value >= x.value){
i++;
swap(a, i, j);
}
}
swap(a, m, i);
return i;
}
void q(struct mooncake a[],int m,int n){
int r;
if(m < n){
r = p(a, m, n);
q(a, m, r-1);
q(a, r+1, n);
}
}
int main() {
int n;
double d, value;
while(scanf("%d%lf", &n, &d) != EOF){
struct mooncake* m = (struct mooncake*)malloc(n * sizeof(struct mooncake));
for(int i = 0; i < n; i++){
scanf("%lf", &m[i].number);
}
for(int i = 0; i < n; i++){
scanf("%lf", &m[i].price);
m[i].value = m[i].price / m[i].number;
}
q(m, 0, n-1);
value = 0;
for(int i = n - 1; i >= 0; i--){
if(d >= m[i].number){
value += m[i].price;
d -= m[i].number;
} else {
value += d * m[i].value;
break;
}
}
printf("%.2lf\n", value);
free(m);
}
return 0;
}
```
这里使用了动态内存分配,通过malloc函数分配结构体数组的内存空间,在程序结束时使用free函数释放内存。同时,在快速排序算法中,将原来的比较大小方式改为比较价值大小,以实现降序排序。在计算总价值时,从大到小依次考虑每种月饼的数量,如果需求量大于该种月饼的数量,则全部购买该种月饼,继续考虑下一种月饼;否则,按需求量购买该种月饼,并计算对应的总价值即可。