java之天平秤物
简介:
* 有4个砝码,总重量是40克,砝码的质量是整数,且各不相等。
* 请确定它们的质量,使之能称出1-40克任何整数质量的物体。
/**
*
*/
package javaLearn;
/**
* @author Administrator
*qq:1012885458
*@param: args
*
*/
public class 天平称物 {
public static void main(String args[]) {
int wight1,wight2,wight3,wight4,d1,d2,d3,d4,x,flag;
int w1=0,w2=0,w3=0,w4=0;
System.out.println("砝码被分为四种:");
//使用穷举法:4个嵌套循环
for(wight1=1;wight1<=40;wight1++)
//因为每个不相同,可以在此基础上++;
// for(wight2=2;wight2<=40;wight2++) {
//优化
for(wight2=wight1+1;wight2<=40-wight1;wight2++)
for(wight3=wight2+1;wight3<=40-wight2;wight3++)
if((wight4=40-wight1-wight2-wight3)>wight3) {
//符合条件
//flag:1 代表找到了 0 还没找到
//d: 0不用改砝码 1砝码在天平的右边 -1在左边
for(flag=1,x=1;x<41&&flag==1;x++)
for(flag=0,d1=1;d1>-2;d1--)
for(d2=1;d2>-2&&flag==0;d2--)
for(d3=1;d3>-2&&flag==0;d3--)
for(d4=1;d4>-2&&flag==0;d4--)
//找到组合,修改标志
if(x==wight1*d1+wight2*d2+wight3*d3+wight4*d4) {
flag=1;
}
if(flag==1) {
System.out.printf("四个砝码的组合为: %d %d %d %d \n",wight1,wight2,wight3,wight4);
w1=wight1;
w2=wight2;
w3=wight3;
w4=wight4;
}
}
System.out.printf("%d %d %d %d \n",w1,w2,w3,w4);
String left="";String right=""; //表达初始化
//a1a2a3a4; 求出了四种码再遍历求出每种情况
for(int i=1;i<=40;i++)
//循环40次,打印出每种情况;
for(int a1=-1;a1<=1;a1++)
for(int a2=-1;a2<=1;a2++)
for(int a3=-1;a3<=1;a3++)
for(int a4=-1;a4<=1;a4++)
{
if(i == a1*w1+a2*w2+a3*w3+a4*w4) {
boolean f=true;//表达式右侧第一项标志
left=i+"";
switch(a1) {
//根据状态修改表达式
case -1:
left=left+"+"+w1;
break;
case 1:
if(f) right=right+ w1;
else right=right+"+"+w1;
f=false;
break;
}
switch(a2) {
case -1:
left=left+"+"+w2;
break;
case 1:
if(f) right=right+w2;
else right=right+"+"+w2;
f=false;
break;
}
switch(a3) {
case -1:
left=left+"+"+w3;
break;
case 1:
if(f) right=right+w3;
else right=right+"+"+w3;
f=false;
break;
}
switch(a4) {
case -1:
left=left+"+"+w4;
break;
case 1:
if(f) right=right+w4;
else right=right+"+"+w4;
f=false;
break;
}
//输出表达式
System.out.println(left+"="+right);
}
left="";
right="";
}
}
}