首页 > 试题广场 >

有多少升啤酒?

[单选题]
一位酒商有6桶葡萄酒和啤酒,容量分别为30升、32升、36升、38升、40升、62升。其中五桶装着葡萄酒,一桶装着啤酒。第一位顾客买走了两桶葡萄酒;第二位顾客所买的葡萄酒则是第一位顾客的两倍。请问,有多少升啤酒?
  • 32
  • 40
  • 36
  • 38
写个程序来吧,猜的始终有问题:
public class BeerQuest {

private static final int [] arr = {30,32,36,38,40,62};
public static void main(String[] args) {
int x = 0; int y = 0;
        for(int i=0 ;i<arr.length;i++){
        for (int j = i+1; j < arr.length; j++) {
                            x=arr[i];
                            y=arr[j];
                            int z = 2*(x+y);
                           int sum = x+y+z;
                           //System.out.println(sum);
                          if(sum>=176 && sum<=208){
                                 int beer = 238-sum;
                                for(int k=0;k<arr.length;k++){
                                     if (beer==arr[k]) {
                                               System.out.println("第一位顾客买了:"+x+" 升 和 "+y+" 升");
                                               System.out.println("第二位顾客买了: "+z+" 升");
                                               System.out.println("啤酒有 "+beer+" 升");
                }
       }
}
x=0;
y=0;
z=0;
sum=0;
}
        }
}

}

编辑于 2016-02-16 11:39:42 回复(0)
/*
假设第一位顾客买了a、b,则第二位顾客一定买了剩余的所有葡萄酒(因为a+b最小为62)。 假设啤酒为x,则 3*(a+b)+x=238
所以啤酒x一定满足:(238-x)是3的倍数。
所以只能选B。 */

发表于 2016-03-02 19:35:03 回复(2)
其实有个简单方法,说明除开某一份,其余五份的和是三的倍数,30.36都能被3整除,只有40余1.其余都余2
发表于 2015-12-07 19:05:28 回复(15)
比较笨 写了个程序输出结果
public class Charandchar {
	public static void main(String[] args) {
		// 一位酒商有6桶葡萄酒和啤酒,容量分别为30升、32升、36升、38升、40升、62升。
		// 其中五桶装着葡萄酒,一桶装着啤酒。
		// 第一位顾客买走了两桶葡萄酒;
		// 第二位顾客所买的葡萄酒则是第一位顾客的两倍。请问,有多少升啤酒?
		int bear[] = new int[] { 30, 32, 36, 38, 40, 62 };
		for (int i = 0; i < bear.length; i++) {
			for (int j = i + 1; j < bear.length; j++) {
				int sum = bear[i] + bear[j];
				// 统计剩下的4桶 如果存在其中3桶等于sum的两倍 那么可以 输出
				// 这里应该统计最大的3个数的和
				int num = Test(i, j, bear, sum);
				if (num != 0) {
					System.out.println(num);
				}
			}
		}
	}
	private static int Test(int i, int j, int[] bear, int sum) {
		int sum_test[] = new int[bear.length - 2];
		int count = 0;
		// 将剩下的4桶复制到sum_test数组
		for (int k = 0; k < bear.length; k++) {
			if (k != i && k != j) {
				sum_test[count++] = bear[k];
				// System.out.print(bear[k] + " ");
			}
		}
		// 4桶中统计任意3桶的总和 如果存在这3桶的和==sum的两倍 返回
		for (int l = 0; l < sum_test.length; l++) {
			int sum_three = 0;
			for (int m = 0; m < sum_test.length; m++) {
				if (l != m) {
					sum_three += sum_test[m];
				}
			}
			if (sum_three == sum * 2) {
				// System.out.println(sum_three + "-" + sum + "-" + bear[i] +
				// "-" + bear[j]);
				return sum_test[l];
			}
		}
		return 0;
	}
}
结果输出 40

发表于 2015-12-07 19:20:03 回复(7)
把所有数字加起来等于238,除以3余1。 所有数字中只有40除以3余1,故选择40。
发表于 2016-09-01 11:48:59 回复(0)
30 和 62 不在选项里,说明一定是葡萄酒。 30 和32 36 38 40 里面的1个加起来是62和里面2个加起来的2倍。
32, 两倍尾号是4,去掉62的2,是2, 其余凑不出来。
36,两倍尾号是2, 去掉62的2, 是0, 32 38 即可, 简单验证下,发现成功。 (30+36)X 2 = (32+38+62) .

发表于 2016-02-17 16:50:30 回复(1)
最简单的想法是由于葡萄酒的量能够被3整除,总量为238只有去除40 后的结果198才能被3整除
发表于 2017-04-07 11:03:39 回复(0)
有直接代入答案的吗? 总和减答案看是不是3的倍数。
发表于 2016-03-02 15:20:33 回复(0)
首先顾客把葡萄酒买完了只剩啤酒才会有答案40 把所有的升加起来是238 然后第一个人假设买了1份,第二个人是他的两倍,然后是2份 1+2=3份 然后减去剩下的啤酒刚好可以被分成3份 238-40=198 当然只有剩下啤酒40才能被3整除,其他的都不行
发表于 2018-03-01 19:06:12 回复(0)
30升、32升、36升、38升、40升、62升求和:238升,除以3余1,。
要想减去其中一个数之后是3的倍数,需要也减去一个除以3余1的数,这里只有40
tip:一个数除以三的余数等于其各位数字的和除以3的余数。
发表于 2018-09-14 20:17:30 回复(0)
238也不是3的倍数啊
发表于 2017-08-22 09:38:22 回复(0)
第一位顾客买2桶,容量最少为30+32 = 62升,则第二位顾客买的最少为124升,由于最多的两桶加起来只有102,因此他买了3桶葡萄酒。可见5桶葡萄酒容量和是3的倍数。两位葡萄酒和啤酒总共为238升,除以3余2,而葡萄酒的总量是3的倍数,因此啤酒量为除以3余2,只有40符合条件。
发表于 2016-04-28 10:23:04 回复(0)
可以使用排除法,四个选项排除很快,辅助三的倍数。
发表于 2016-04-05 10:25:45 回复(0)
LDD头像 LDD
30 36 38 32 62 最后剩下40
发表于 2015-12-07 12:56:29 回复(0)
酒桶是30升、32升、36升、38升、40升、62升,这个顺序是升序的,因为后面的顾客比前面的大,所以可以确定前面的顾客从小的搭配。
方案一:30+32=62,因为倍数是两倍,62*2=124,在剩余的36、38、40、62里面找,看看有没有加起来刚好和124相等的,因为有位数有4,所以找能凑4的,36+38=74+40=114,都不满足64的2倍数。
方案二:30+36=66,66*2=132,剩余的有32、38、40、62,32+38+62=132,所以剩下的40就是啤酒
发表于 2022-10-13 18:43:02 回复(0)
直接观察的 62=30×2+2 32+38=36×2-2
发表于 2020-03-30 22:44:59 回复(0)
根本就没有说明第二名顾客把剩下的所有葡萄酒买完了,题目一点都不严谨
发表于 2018-03-29 10:00:10 回复(0)
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<iostream>
#include <cstring>
#include<algorithm>
using namespace std;
int a[]= {30,32,36,38,40,62},vis[6]= {0},b[20],c[20]; //b记录任意两值之和,c记录两数的下标
int main() {
    int i,sum,j,k,num=0,cnt=0,h,a1,a2,a3,a4,cmt=0;
    memset(b,0,sizeof(b));
    for(i=0; i<6; i++) {
        for(j=i+1; j<6; j++) {
            b[cnt++]=a[i]+a[j];
            c[cnt-1]=10*j+i;
        }
    }
    for(i=0; i<cnt; i++) {
        for(j=0; j<6; j++) {
            if(j!=c[i]%10&&j!=c[i]/10) {
                b[i]+=a[j];
                a1=c[i]%10,a2=c[i]/10;
                for(k=0; k<cnt; k++) {
                    a3=c[k]%10,a4=c[k]/10;
                    if(b[i]==2*b[k]&&a1!=a3&&a1!=a4&&a2!=a3&&a2!=a4&&a3!=j&&a4!=j)
                        for(h=0; h<6; h++)
                            if(h!=a1&&h!=a2&&h!=a3&&h!=a4&&h!=j)
                                printf("%d\n",a[h]),cmt=1;
                }
                b[i]-=a[j];
            }
            if(cmt)
                break;
        }
        if(cmt)
                break;
    }
    return 0;
} 

发表于 2017-08-04 11:51:34 回复(2)
按照个位数减少需要判断的集合。
发表于 2016-04-19 14:51:35 回复(0)
这个问题可以这样看,所有数字个位数组合成的数的个位数组合为0、2、4、6、8,均可能有两倍的关系,而拿去个位数0对这种组合的影响最小,因此选40最合适
发表于 2016-03-01 16:19:49 回复(0)