小明横穿沙漠,需要携带至少x毫升的水。
有两种规格的矿泉水可供选购:小瓶矿泉水每瓶500ml,价格a元。大瓶矿泉水每瓶1500ml,价格b元。
小明打算买一些矿泉水用于横穿沙漠,为了保证至少买到x毫升的水,小明至少需要花费多少钱?
小明横穿沙漠,需要携带至少x毫升的水。
有两种规格的矿泉水可供选购:小瓶矿泉水每瓶500ml,价格a元。大瓶矿泉水每瓶1500ml,价格b元。
小明打算买一些矿泉水用于横穿沙漠,为了保证至少买到x毫升的水,小明至少需要花费多少钱?
第一行一个正整数t(t<=1000),表示有t组测试数据;
接下来t行,每行3个正整数:x,a,b。其中x<=1,000,000,000,表示小明至少需要x毫升水;a<=100,b<=100,分别表示小瓶和大瓶矿泉水的价格,单位:元。
每组测试数据输出一行,表示小明最少需要花费的钱,单位:元。
3 5000 5 10 4999 5 10 5000 5 100
35 35 50
/* * 分享一个java的代码 * 思路: * 1.判断性价比:如果大瓶的价格是小瓶的三倍或更多,那肯定全选小瓶,反之则进入第二步判断 * 2.判断最后一个大瓶是否用1至2个小瓶替代,看看几个小瓶替代的后的总价格是否超过一个大瓶的价格,是则替代,否则替代 * */ import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); int swml=500; int bwml=1500; //a[x][0]为最小ml //a[x][1]为小瓶价格 //a[x][2]为大屏价格 int tem= in.nextInt(); int a[][] = new int[tem][3]; for(int i=0;i<tem;i++){ for(int j=0;j<3;j++){ a[i][j]=in.nextInt(); } } double b[]=new double[tem]; for(int i=0;i<tem;i++){ b[i]=(double)a[i][2]/(double)a[i][1]; //性价比小于3;小瓶优势 if(3-b[i]<1e-12){ int n = 0; while (n*swml<a[i][0]){ n++; } System.out.println(n*a[i][1]); } //大瓶优势 else { int n=0; while (n*bwml<a[i][0]){ n++; } //全部都是大瓶的价格 int n1=n*a[i][2]; //开始用小瓶替代最后一个大瓶 int m=0; while (((n-1)*bwml+m*swml)<a[i][0]){ m++; } //小瓶替代后的价格 int n2=(n-1)*a[i][2]+m*a[i][1]; //判断谁便宜就可以了 if(n1<n2) System.out.println(n1); else System.out.println(n2); } } } }