题目见图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]
*/