杭电acm的 FatMouse' Trade问题 我的代码用了好多测试数据都显示结果是对的,用c语言写的,但是提交的时却
显示wronganswer#include<stdio.h>voidmain(){inta[1001],b[1001],i,j,n,a1,b1,weight;double...
显示wrong answer
#include<stdio.h>
void main(){
int a[1001],b[1001],i,j,n,a1,b1,weight;
double price[1001],sum,w,price1;
//freopen("text.txt","r",stdin);
while(1){
scanf("%d%d",&weight,&n);
if((weight==-1&&n==-1)) break;
if(n==0) continue;
scanf("%d%d",&a[0],&b[0]);
price[0]=(double)a[0]/b[0];
for(i=1;i<n;i++){
scanf("%d%d",&a1,&b1);
price1=(double)a1/b1;
if(price1>price[i-1]){
price[i]=price[i-1];
a[i]=a[i-1];
b[i]=b[i-1];
for(j=i-2;j>=0;j--){
if(price1>price[j]){
price[j+1]=price[j];
a[j+1]=a[j];
b[j+1]=b[j];
}
else break;
}
price[j+1]=price1;
a[j+1]=a1;
b[j+1]=b1;
}
else{
price[i]=price1;
a[i]=a1;
b[i]=b1;
}
}
sum=0;
i=0;
w=weight;
while(w>0&&i<n){
if(w>b[i]){
w=w-b[i];
sum+=a[i];
}
else{
sum+=w*price[i];
w=0;
}
i++;
}
printf("%.3lf\n",sum);
}
}
不好意思 代码没有注释 我是用插入排序算法进行排序的,还有就是我要的是改错 展开
#include<stdio.h>
void main(){
int a[1001],b[1001],i,j,n,a1,b1,weight;
double price[1001],sum,w,price1;
//freopen("text.txt","r",stdin);
while(1){
scanf("%d%d",&weight,&n);
if((weight==-1&&n==-1)) break;
if(n==0) continue;
scanf("%d%d",&a[0],&b[0]);
price[0]=(double)a[0]/b[0];
for(i=1;i<n;i++){
scanf("%d%d",&a1,&b1);
price1=(double)a1/b1;
if(price1>price[i-1]){
price[i]=price[i-1];
a[i]=a[i-1];
b[i]=b[i-1];
for(j=i-2;j>=0;j--){
if(price1>price[j]){
price[j+1]=price[j];
a[j+1]=a[j];
b[j+1]=b[j];
}
else break;
}
price[j+1]=price1;
a[j+1]=a1;
b[j+1]=b1;
}
else{
price[i]=price1;
a[i]=a1;
b[i]=b1;
}
}
sum=0;
i=0;
w=weight;
while(w>0&&i<n){
if(w>b[i]){
w=w-b[i];
sum+=a[i];
}
else{
sum+=w*price[i];
w=0;
}
i++;
}
printf("%.3lf\n",sum);
}
}
不好意思 代码没有注释 我是用插入排序算法进行排序的,还有就是我要的是改错 展开
3个回答
展开全部
这是算法,思路挺简单的!
#include<stdio.h>
#include<stdlib.h>
int main()
{
int M,N,*j,*f,i,k,t;
float sum=0;
scanf("%d%d",&M,&N);
while(M!=-1&&N!=-1)
{
j=malloc(N*sizeof(int));
f=malloc(N*sizeof(int));
for(i=0;i<N;i++)
{
scanf("%d%d",&j[i],&f[i]);
for(k=i;k>=1;k--)
{
if((float)j[k]/(float)f[k]>(float)j[k-1]/(float)f[k-1])
{
t=j[k];
j[k]=j[k-1];
j[k-1]=t;
t=f[k];
f[k]=f[k-1];
f[k-1]=t;
}
}
}
i=0;
while(M>0&&i<N)
{
if(f[i]<=M)
{
sum+=j[i];
M=M-f[i];
i++;
continue;
}
else if(f[i]>M)
{
sum=M*((float)j[i]/(float)f[i])+sum;
break;
}
}
printf("%.3f\n",sum);
sum=0;
free(j);
free(f);
scanf("%d%d",&M,&N);
}
return 0;
}
#include<stdio.h>
#include<stdlib.h>
int main()
{
int M,N,*j,*f,i,k,t;
float sum=0;
scanf("%d%d",&M,&N);
while(M!=-1&&N!=-1)
{
j=malloc(N*sizeof(int));
f=malloc(N*sizeof(int));
for(i=0;i<N;i++)
{
scanf("%d%d",&j[i],&f[i]);
for(k=i;k>=1;k--)
{
if((float)j[k]/(float)f[k]>(float)j[k-1]/(float)f[k-1])
{
t=j[k];
j[k]=j[k-1];
j[k-1]=t;
t=f[k];
f[k]=f[k-1];
f[k-1]=t;
}
}
}
i=0;
while(M>0&&i<N)
{
if(f[i]<=M)
{
sum+=j[i];
M=M-f[i];
i++;
continue;
}
else if(f[i]>M)
{
sum=M*((float)j[i]/(float)f[i])+sum;
break;
}
}
printf("%.3f\n",sum);
sum=0;
free(j);
free(f);
scanf("%d%d",&M,&N);
}
return 0;
}
展开全部
这是我的代码,虽然是c++做的,但思路就是这样。另外你要多用函数,你自己写的排序可能不正确。不过c里面不是可以用qsort函数嘛。这道题很明显用结构体来做可以省事很多嘛,你想的太多了
#include<iostream>
#include<string>
#include<algorithm>
#include<cstdio>
using namespace std;
struct javabeans
{
double j;
double f;
double max;
};
bool cmp(struct javabeans a,struct javabeans b)
{
if(a.max!=b.max)
return a.max>b.max;
}
int main()
{
int i,m,n,k;
struct javabeans exam[1000];
while(1)
{
cin>>m>>n;
if(m==-1&&n==-1)
break;
for(i=0;i<n;i++)
cin>>exam[i].j>>exam[i].f;
for(i=0;i<n;i++)
exam[i].max=exam[i].j/exam[i].f;
sort(exam,exam+n,cmp);
double sum=0;
for(i=0;i<n;i++)
if(m-exam[i].f>0)
{
m-=exam[i].f;
sum+=exam[i].j;
}
else
{
sum+=exam[i].max*m;
break;
}
printf("%.3f\n",sum);
}
return 0;
}
#include<iostream>
#include<string>
#include<algorithm>
#include<cstdio>
using namespace std;
struct javabeans
{
double j;
double f;
double max;
};
bool cmp(struct javabeans a,struct javabeans b)
{
if(a.max!=b.max)
return a.max>b.max;
}
int main()
{
int i,m,n,k;
struct javabeans exam[1000];
while(1)
{
cin>>m>>n;
if(m==-1&&n==-1)
break;
for(i=0;i<n;i++)
cin>>exam[i].j>>exam[i].f;
for(i=0;i<n;i++)
exam[i].max=exam[i].j/exam[i].f;
sort(exam,exam+n,cmp);
double sum=0;
for(i=0;i<n;i++)
if(m-exam[i].f>0)
{
m-=exam[i].f;
sum+=exam[i].j;
}
else
{
sum+=exam[i].max*m;
break;
}
printf("%.3f\n",sum);
}
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你是吖沣吧,没人帮你解答的,老实把悬赏金给我吧~~~
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询