1 条题解

  • 0
    @ 2025-4-7 21:19:29

    C :

    #include <stdio.h>
    int main()
    {
      int m,n,i=0,t=0; 
      double j[1000],f[1000],sum=0;
      while(scanf("%d %d",&m,&n)!=EOF && m+n>0) 
      {
       for(i=0;i<n;i++)
       {
            scanf("%lf %lf",&j[i],&f[i]);          
       }
       for(i=0;i<n;i++)
       {
           for(t=0;t<n;t++)
           {
               if(j[i]/f[i]>j[t]/f[t])
               {
                     double temp;
                       temp=j[i];
                       j[i]=j[t];  
                       j[t]=temp;
                        
                       temp=f[i];
                       f[i]=f[t];  
                       f[t]=temp;
               }
           }
       }
       for(i=0;i<n;i++)
       {
          if(m<f[i])
          {
             sum+=m*j[i]/f[i];
             break;
          }
          else
          {
              sum+=j[i];
              m-=f[i];
          }
       }
       printf("%.3f\n",sum);
       sum=0;
    }
      return 0;
    }
    
    

    C++ :

    //注意m和f可以为0 
    #include <iostream>
    #include <algorithm>
    #include <cstdio>
    #include <string.h>
    #include <queue>
    #include <stdlib.h>
    using namespace std;
    
    typedef struct node
    {
    	int j;
    	int f;
    	double d;
    }MC;
    MC a[1003];
    
    bool cmp(MC a,MC b)
    {
    	return a.d>b.d;
    }
    
    int main()
    {
    	int n,m,i;
    	double t;
    	while(scanf("%d%d",&n,&m))
    	{
    		if(n==-1&&m==-1)
    			break;
    		for(i=0;i<m;i++)
    		{
    			scanf("%d%d",&a[i].j,&a[i].f);
    			a[i].d=1.0*a[i].j/a[i].f;
    		}
    		sort(a,a+m,cmp);
    		t=0;
    		for(i=0;i<m;i++)
    		{
    			if(n>a[i].f)
    			{
    				t+=a[i].j;
    				n-=a[i].f;
    			}
    			else
    			{
    				t+=n*a[i].d;
    				break;
    			}
    		}
    		printf("%.3lf\n",t);
    	}
    	return 0;
    }
    

    Java :

    import java.text.DecimalFormat;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Scanner;
    
    
    
    class Main {
    	private static Scanner scan=new Scanner(System.in);
    	public static void main(String[] args) {
    		boolean flag=true;
    		List<Double> list=new ArrayList<Double>();
    		while(flag)
    		{
    			double a=scan.nextInt();
    			int b=scan.nextInt();
    			if(a==-1 && b==-1)
    			{
    				flag=false;
    			}
    			else 
    			{
    				double[][] values=new double[b][2];
    				
    				for (int i = 0; i < b; i++) 
    				{
    					values[i][0]=scan.nextInt();
    					values[i][1]=scan.nextInt();
    				}
    				for (int i = 0; i < b-1; i++) 
    				{
    					for (int j = i+1; j < b; j++) 
    					{
    						if((values[i][0]/values[i][1])<(values[j][0]/values[j][1]))
    						{
    							double x=values[i][0];
    							double y=values[i][1];
    							values[i][0]=values[j][0];
    							values[i][1]=values[j][1];
    							values[j][0]=x;
    							values[j][1]=y;
    						}
    						else if((values[i][0]/values[i][1])==(values[j][0]/values[j][1]) && values[i][0]<values[j][0])
    						{
    							double x=values[i][0];
    							double y=values[i][1];
    							values[i][0]=values[j][0];
    							values[i][1]=values[j][1];
    							values[j][0]=x;
    							values[j][1]=y;
    						}
    					}
    				}
    				double result=0;
    				double stillNum=a;
    				for (int i = 0; i < b; i++) 
    				{
    					if(stillNum<=values[i][1])
    					{
    						result=stillNum*(values[i][0]/values[i][1])+result;
    						list.add(result);
    						break;
    					}
    					else 
    					{
    						result+=values[i][0];
    						stillNum=stillNum-values[i][1];
    					}
    				}
    			}
    		}
    		DecimalFormat df=new DecimalFormat("0.000");
    		
    		for (Double s : list) 
    		{
    			System.out.println(df.format(s));
    		}
    	}
    }
    
    • 1

    信息

    ID
    1180
    时间
    1000ms
    内存
    32MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者