}
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 #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;
}