首页 > 试题广场 >

配比

[编程题]配比
  • 热度指数:2430 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
小 M 要制作一种黑暗饮料,这种饮料的原料有 n 种,编号为 1-n ,已知小 M 的容器最多容纳 v 升材料,黑暗料理的各种原料配比为 a1 : a2 : a3 : ... : an, 每种原料分别有b1,b2,... bn升。 问小 最多可以制作多少升这种饮料。小 使用的各种原料体积和不能超过 v 

数据范围:

输入描述:
输入第一行,两个正整数 n 和 v ,表示原料种类数和容器容积。输入第二行包含 n 个数 a1,a2,a3,...an ,表示 n 种原料的配比。 输入第三行包含 n 个数 b1,b2,b3...bn ,表示小 M 拥有的各种原料数。 (数字间以空格隔开)


输出描述:
输出包含一个非负数,表示小M最多可以制作多少饮料,结果保留4位小数。
示例1

输入

1 100
1
40

输出

40.0000
示例2

输入

2 100
1 1
50 50

输出

100.0000
import java.text.DecimalFormat;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in=new Scanner(System.in);
        int n=in.nextInt();
        int v=in.nextInt();
        int sum=0;
        double[]a=new double[n];
        double[]b=new double[n];
        for (int i = 0; i <n ; i++) {
            a[i]=in.nextDouble();
            sum+=a[i];
        }
        for (int i = 0; i <n ; i++) {
            b[i]=in.nextDouble();
        }
        double weightMax=b[0]/a[0]*sum;
        //int weightMaxIndex=0;
        for (int i = 1; i < n; i++) {
            double maxV=b[i]/a[i]*sum;
            if(maxV<weightMax){
                weightMax=maxV;
               // weightMaxIndex=i;
            }
        }
        if(weightMax>=v){
            keepFour(v);
        }else{
            keepFour(weightMax);
        }
    }
    public static  void keepFour(double d1){
        DecimalFormat df=new DecimalFormat("#0.0000");
        System.out.println(df.format(d1));
    }

}

发表于 2020-04-17 22:03:13 回复(0)
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Main {
    private static List<Double> lista;
    private static List<Double> listb;

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int V = in.nextInt();
        double suma  = 0;
        double min = Double.MAX_VALUE;
        lista = new ArrayList<>(n);
        listb = new ArrayList<>(n);
        for (int i = 0; i < n; i++) {
            double temp = in.nextDouble();
            //构造配比数组
            lista.add(temp);
            //计算每份饮料所需体积
            suma+=temp;
        }
        for (int i = 0; i < n; i++) {
            double temp = in.nextDouble();
            //构造拥有原料体积数组
            listb.add(temp);
        }
        for (int i = 0; i < n; i++) {
            //求在原料允许的情况下,最多能做多少份饮料
            min = Math.min(listb.get(i)/lista.get(i), min);
        }
        //在原料允许的情况下最多能做的饮料体积
        double ans2 = min*suma;
        //比较容器体积和ans,求出较小值即为答案
        double ans = Math.min(V,ans2);
        DecimalFormat df = new DecimalFormat("0.0000");
        System.out.println(df.format(ans));
    }
}

发表于 2020-08-05 23:09:23 回复(0)
#include <bits/stdc++.h>
using namespace std;
int main(){
    int n,v;
    cin>>n>>v;
    int a[n], b[n], s=0;
    double r = 10000000;
    for(int i=0;i<n;i++){
        cin>>a[i];
        s += a[i];
    }
    for(int i=0;i<n;i++){
        cin>>b[i];
        if(1.0*b[i]/a[i]<r)
            r = 1.0*b[i]/a[i];
    }
    printf("%.4f\n", min(s*r, 1.0*v));

    return 0;
}

发表于 2019-10-27 01:48:48 回复(0)
n,v = list(map(int,input().strip().split(' ')))
a = list(map(int,input().strip().split(' ')))
b = list(map(int,input().strip().split(' ')))

ratio = []
for i in range(n):
    ratio.append(b[i]/a[i])
max_v = min(ratio)*sum(a)
#配出来小于v,则输出max_v
if max_v < v:
    print(format(max_v,'.4f'))
#否则输出v,肯定能配出来
else:
    print(format(v,'.4f'))

发表于 2019-08-03 21:31:23 回复(0)
#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n,v;
    cin>>n>>v;
    vector<double>a(n),b(n);
    double res=v,sum=0.0,tmp;
    for(int i=0;i<n;i++)
    {
        cin>>a[i];
        sum+=a[i];
    }
    for(int i=0;i<n;i++)
    {
        cin>>b[i];
        tmp=b[i]/a[i];
        res=min(res,tmp);
    }
    tmp=res*sum;
    res=tmp < v ? tmp : v;
    cout << fixed << setprecision(4)<<res<<endl;
    return 0;
}

发表于 2019-08-20 21:59:15 回复(0)
得出每一种配料对应的饮料的总容量v,通过math.min()得出最小的容量,这样每个配比的配料才能满足,然后和容器相比,选择最小的,b[i]*sum/a[i]=v
发表于 2021-07-16 16:54:05 回复(0)
if __name__ == '__main__':
    import sys
    messages = sys.stdin.readlines()
    n = int(messages[0].strip().split()[0])
    V = int(messages[0].strip().split()[1])
    ai =[]
    bi =[]
    for i in range(n):
        ai.append(int(messages[1].strip().split()[i]))
        bi.append(int(messages[2].strip().split()[i]))

    ratio =[]
    for i in range(n):
        ratio.append(float(bi[i])/float(ai[i]))
    res = min(ratio)*sum(ai)
    if res<V:
        print(format(res,'.4f'))
    else:
        print(format(V,'.4f'))
发表于 2020-05-20 15:46:24 回复(0)
import java.util.*;
import java.text.DecimalFormat; 
public class Main {
    public static void main(String[] args) {
        Scanner in=new Scanner(System.in);
        int sum=0;
        
        
        int n=in.nextInt();
        int V=in.nextInt();
        int[] a=new int[n];
        int[] b=new int[n];
        for(int i=0;i<n;i++) {
            a[i]=in.nextInt();
            sum+=a[i];
        }
        for(int i=0;i<n;i++) {
            b[i]=in.nextInt();
        }
        double[] Lmax=new double[n];
        for(int i=0;i<n;i++) {
            Lmax[i]=(double)sum*(double)b[i]/(double)a[i];
        }
        Arrays.sort(Lmax);
        DecimalFormat df = new DecimalFormat( "0.0000"); 
        if(Lmax[0]<V) {
            System.out.println(df.format(Lmax[0]));
        }
        else {
            System.out.println(df.format(V));
        }
    }

}
发表于 2020-04-11 13:33:21 回复(0)
import sys

if __name__ == '__main__':
    n, v = list(map(int, sys.stdin.readline().split()))
    list_proportion = list(map(int, sys.stdin.readline().split()))
    list_save = list(map(int, sys.stdin.readline().split()))
    eve_pro = v/sum(list_proportion)
    while True:
        for i in range(n):
            if list_save[i] < list_proportion[i] * eve_pro:
                eve_pro = list_save[i]/list_proportion[i]
                break
        else:
            break
    res = 0
    for i in range(n):
        res += eve_pro * list_proportion[i]
    print('%.4f' % res)


发表于 2019-08-24 10:37:49 回复(0)
package main

import (
    "fmt"
    "bufio"
    "os"
    "strconv"
    "strings"
    "math"
    )

func getResult(n int, V int, arrayA []int,arrayB []int) float64 {
    var result float64
    var min = math.MaxFloat64
    for i := 0; i < n; i++ {
        if float64(arrayB[i])/float64(arrayA[i]) < min {
            min = float64(arrayB[i])/ float64(arrayA[i])
        }
    }
    for i := 0; i < n; i++ {
        result += (float64(arrayA[i]) * min)
    }
    if(result >=  float64(V)) {
        result = float64(V)
    }
    return result
}

func main() {
    scanner := bufio.NewScanner(os.Stdin)
    for scanner.Scan() {
        s := scanner.Text()
        str_slice := strings.Fields(s)
        n,_ := strconv.Atoi(str_slice[0])
        V,_ := strconv.Atoi(str_slice[1])
        scanner.Scan()
        s = scanner.Text()
        str_slice = strings.Fields(s)
        arrayA := make([]int, n)
        arrayB := make([]int, n)
        for i := 0; i < n; i++ {
            arrayA[i],_ = strconv.Atoi(str_slice[i])
        }
        scanner.Scan()
        s = scanner.Text()
        str_slice = strings.Fields(s)
        for i := 0; i < n; i++ {
            arrayB[i],_ = strconv.Atoi(str_slice[i])
        }
        ///////////////////////////////////////
        res := getResult(n,V,arrayA,arrayB)
        fmt.Printf("%.4f\n",res)
    }
}

编辑于 2019-06-11 22:21:43 回复(0)