数字填空

题目见图1.

图1 题目要求

微笑来源:同学给的某道在线笔试题。

微笑分析:这么看不起java,不让用。

微笑代码:

package com.likeyihu;

import java.util.Arrays;

public class GeekBing {
	short a[][] = new short[3][3];

	//按照从上到下,从左到右的顺序
	//因为有些空在等式的中间,填后无法立即验算,就按true返回
	boolean checkResult(int i, int j) {
		boolean flag=true;
		switch (i) {
		case 0: {
			switch (j) {
			case 0: 
			case 2: 
				break;
			case 1: 
				flag=a[0][0]+a[0][1]-a[0][2]==4;
				break;
			}//switch-j
			break;
		}
		case 1: {
			switch (j) {
			case 0:
			case 1: 
				break;
			case 2: 
				flag=a[1][0]-a[1][1]*a[1][2]==4;
				break;
			}//switch-j
			break;
		}
		case 2: {
			switch (j) {
			case 0: {
				//除数不能为0
				if(a[2][0]!=0){
					double dividend=a[1][0],divisor=a[2][0];
					flag=a[0][0]+dividend/divisor==4.0;
				}
				else 
					flag=false;
				break;
			}
			case 1: {
				flag=a[0][1]-a[1][1]*a[2][1]==4;
				break;
			}
			case 2: {
				flag=a[0][2]-a[1][2]-a[2][2]==4;
				flag=flag&&a[2][0]+a[2][1]-a[2][2]==4;
				break;
			}
			}//switch-j
			break;
		}
		}//switch(i)
		return flag;
	}
	//对i行j列填充
	void fun(int i,int j){
		//固定内容
		if(i==0&&j==2){
			fun(1,0);
			return;
		}
		for(short k=0;k<=100;k++){
			a[i][j]=k;
			//所填数字通过校验
			if(checkResult(i,j)){
				//一套答案出来了
				if(i==2&&j==2){
					System.out.println("ok");
					printAnswer();
				}
				//继续往下走
				else{
					//从上到下
					if(j==2)
						fun(i+1,0);
					//从左到右
					else
						fun(i,j+1);
				}
				
			}//if(checkResult(i,j))
		}//for
	}
	private void printAnswer() {
		for(int i=0;i<3;i++)
			System.out.println(Arrays.toString(a[i]));
	}
	public static void main(String[] args) {
		GeekBing obj=new GeekBing();
		obj.a[0][2]=9;
		obj.fun(0, 0);
	}
}
/*ok
[2, 11, 9]
[4, 1, 0]
[2, 7, 5]
*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值