JAVA之渔夫分鱼的问题

JAVA之渔夫分鱼的问题

问题描述:

 * 甲、乙、丙三位渔夫出海打鱼,他们随船带了21只箩筐。
 * 当晚返航时,他们发现有7筐装满了鱼,
 * 还有7筐只装了半筐鱼,另外7筐则是空的。
 * 由于他们没有秤,只好通过目测认为7个满筐鱼的重量是相等的
 * ,7个半筐鱼的重量也是相等的。在不将鱼倒出来的前提下
 * ,怎么将鱼和筐平分为三份?
 * 

如图所示:

在这里插入图片描述

代码如下:

/**
 * 
 */
package javaLearn;

/**
 * @author Administrator
 *qq:1012885458
 */
public class 渔夫分鱼 {
    
    
	//  满    半满    空      1满     每个人都平分到3.5个        
	public static void main(String[] args) {
    
    
		//用个二维数组来存储三个渔民的方案;
		int [][] fishMan=new int[3][3];
		System.out.println("可能存在的分配方案:");
		for(int m=1;m<=3;m++) {
    
    
			//m代表第一个人分配到的满框数;
			fishMan[0][0]=m;
			fishMan[0][1]=(int)((3.5-m)/0.5);//通过m计算半框数;
			fishMan[0][2]=7-fishMan[0][0]-fishMan[0][1];
			
			for(int n=1;n<=3;n++) {
    
    
				//第二个
				if(n<m)  continue;//减少循环次数
				fishMan[1][0]=n;
				fishMan[1][1]=(int)((3.5-n)/0.5);
				if(fishMan[1][1] <0)  break;
				fishMan[1][2]=7-fishMan[1][0]-fishMan[1][1];
				for(int p=1;p<=3;p++) {
    
    
					//第三个
					if(p<n||p+n+m!=7)  continue;
					
					
					fishMan[2][0]=p;
					fishMan[2][1]=(int)((3.5-p)/0.5);
					
					if(fishMan[2][1]<0)  break;
					fishMan[2][2]=7-fishMan[2][0]-fishMan[2][1];
					
					//条件满足,输出结果
					if(fishMan[2][1]+fishMan[1][1]+fishMan[0][1]==7&&
							fishMan[2][0]+fishMan[1][0]+fishMan[0][0]==7
							) {
    
    
						
						System.out.println("    满框数           半框数              空框数 ");
						for(int i=0;i<3; i++ ) {
    
    
							System.out.println(i+":   "+fishMan[i][0]+"      "+fishMan[i][1]+"      "+fishMan[i][2]);
							
							
						}
						System.out.println("========================");
						break;
					}
				}
			}
			
		}
	}	
}

猜你喜欢

转载自blog.csdn.net/weixin_42590083/article/details/112460935