本帖最后由 ccywhut 于 2013-6-1 19:48 编辑
代码马马虎虎能用,封装的不好
/*将12枚银币(A-L)分成三组,每组四个,第一次天平两端各放4枚银币
* (A-D和E-H,即是标号0-3和4-7)如果平衡,
进入twelveCoins1。如果不平衡进入twelveCoins2,twelveCoins3.
*/
public class Goodden {
public static void main(String[] args) {
start();
}
//打印出标号和位置。
public static void start(){
Goodden g1=new Goodden();
int A,B,C,D,E,F,G,H,I,J,K,L;
A=B=E=D=F=G=H=I=C=L=K=3;
J=5; //设定初始重量值
int[] coins1=new int[]{A,B,C,D,E,F,G,H,I,J,K,L};
int f=g1.twelveCoins1(coins1)+g1.twelveCoins2(coins1)+g1.twelveCoins3(coins1);
for(int i=0;i<12;i++){
if(coins1==f){
char t=(char)(65+i);
pr(",她是标号为"+t+",是第"+(i+1)+"个元素");
}
}
}
/*标号0-3和4-7两端平衡,从中取出三枚银币(8-10)和三枚银币(0-3)
* (已经认定是真银币)比较。
* 如果平衡,球11是假银币.
。如果不平衡,则可以断定假银币是比真银币重还是轻
*/
public int twelveCoins1(int[] coins){
int f=0;
if(coins[0]+coins[1]+coins[2]+coins[3]==coins[4]+coins[5]+coins[6]+coins[7]){
//平衡
if(coins[8]+coins[9]+coins[10]==coins[0]+coins[1]+coins[2]){
f= coins[11];//球11是假银币,与真银币相比较。
if(f>coins[8])pr2(f);
else pr1(f);
return f;
}
//如果三枚银币(8-10)重量大于三枚银币(0-3),假银币在8-10中
else if(coins[8]+coins[9]+coins[10]>coins[0]+coins[1]+coins[2]){
if(coins[8]==coins[9]){
f=coins[10];
pr2(f);
return f;
}else if(coins[8]>coins[9]){
f=coins[8];
pr2(f);
return f;
}else{
f=coins[9];
pr2(f);
return f;
}
//如果三枚银币(8-10)重量小于三枚银币(0-3),假银币在8-10中
}else if(coins[8]+coins[9]+coins[10]<coins[0]+coins[1]+coins[2]){
if(coins[8]==coins[9]){
f=coins[10];
pr1(f);
return f;
}else if(coins[8]<coins[9]){
f=coins[8];
pr1(f);
return f;
}else{
f=coins[9];
pr1(f);
return f;
}
}
}
return f;
}
//*标号0-3和4-7两端不平衡
public int twelveCoins2(int[] coins){
int f=0;
if(coins[0]+coins[1]+coins[2]+coins[3]>coins[4]+coins[5]+coins[6]+coins[7]){
/*//从中取出四枚银币(3,8-10)和四枚银币(0,1,2,4)比较。
* 如果平衡,假银币在5-7之间.*/
if(coins[0]+coins[1]+coins[2]+coins[4]==coins[3]+coins[8]+coins[9]+coins[10]){
if( coins[5]==coins[6]) {
f=coins[7];
pr1(f);
return f;
}else if (coins[5]>coins[6]){
f=coins[6];
pr1(f);
return f;
}else{
f=coins[5];
pr1(f);
return f;
}
}
//如果四枚银币(3,8-10)小于三枚银币(0,1,2,4),假银币在0-1之间.
else if(coins[0]+coins[1]+coins[2]+coins[4]>coins[3]+coins[8]+coins[9]+coins[10]){
if( coins[0]==coins[1]) {
f=coins[2];
pr2(f);
return f;
}else if (coins[0]>coins[1]){
f=coins[0];
pr2(f);
return f;
}else{
f=coins[1];
pr2(f);
return f;
}
}
//如果四枚银币(3,8-10)大于三枚银币(0,1,2,4),假银币在3-4之间.
else if(coins[0]+coins[1]+coins[2]+coins[4]<coins[3]+coins[8]+coins[9]+coins[10]){
if( coins[4]==coins[1]) {
f=coins[3];
pr2(f);
return f;
}else{
f=coins[4];
pr1(f);
return f;
}
}
}
return f;
}
//*标号0-3和4-7两端不平衡
public int twelveCoins3(int[] coins){
int f=0;
if(coins[0]+coins[1]+coins[2]+coins[3]<coins[4]+coins[5]+coins[6]+coins[7]){
/*从中取出四枚银币(3,8-10)和四枚银币(0,1,2,4)比较。
如果平衡,假银币在5-7之间.比较5,6.*/
if(coins[0]+coins[1]+coins[2]+coins[4]==coins[3]+coins[8]+coins[9]+coins[10]){
if( coins[5]==coins[6]) {
f=coins[7];
pr2(f);
return f;
}else if (coins[5]>coins[6]){
f=coins[5];
pr2(f);
return f;
}else{
f=coins[6];
pr2(f);
return f;
}
}
// 如果四枚银币(3,8-10)大于三枚银币(0,1,2,4),假银币在0-2之间,比较0,1.
else if(coins[0]+coins[1]+coins[2]+coins[4]<coins[3]+coins[8]+coins[9]+coins[10]){
if( coins[0]==coins[1]) {
f=coins[2];
pr1(f);
return f;
}else if (coins[0]>coins[1]){
f=coins[1];
pr1(f);
return f;
}else{
f=coins[0];
pr1(f);
return f;
}
}
//如果四枚银币(3,8-10)小于三枚银币(0,1,2,4),假银币在3-4之间,银币。
else if(coins[0]+coins[1]+coins[2]+coins[4]>coins[3]+coins[8]+coins[9]+coins[10]){
if( coins[4]==coins[1]) {
f=coins[3];
pr1(f);
return f;
}else{
f=coins[4];
pr2(f);
return f;
}
}
}
return f;
}
public static void pr(Object obj){
System.out.print(obj);
}
public static void pr1(Object obj){
System.out.print("银币中找出的结果是:重量为"+obj+"是假币,它比真币轻");
}
public static void pr2(Object obj){
System.out.print("银币中找出的结果是:重量为"+obj+"是假币,它比真币重");
}
}
|