java之天平秤物

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

猜你喜欢

转载自blog.csdn.net/weixin_42590083/article/details/112347892
今日推荐