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