前景导入
第一题
有1-9 9个数,选取3个数组成以下格式:
? + ? = ?
数字只能用一次,不能重复
/**
* 有1-9 9个数,选取3个数组成以下格式:
* ? + ? = ?
* 数字只能用一次,不能重复
*/
public class demo1 {
public static void main(String[] args) {
int min=1;
int max=9;
for (int i = min; i < max ; i++) {
for(int j=min;j < max ; j++){
int result=i+j;
if(i != j && result <= 9 && result != i && result != j){
System.out.println("得到结果"+i+"+"+j+"="+result);
}
}
}
}
}
第二题
有1-9 9个数,选取3个数组成以下格式:
?? + ?? = ??
数字只能用一次,不能重复
如:12+35=47
public class demo2 {
public static void main(String[] args) {
int min=1;
int max=9;
for (int i = min; i < max ; i++) {
for(int j=min;j < max ; j++){
for (int k = min; k < max; k++) {
for (int l = min; l < max ; l++) {
for (int m = min; m < max ; m++) {
for (int n = min; n < max ; n++) {
if(i != j && j != k && k != l && l !=m && m != n ...
&& (10*i+j)+(10*k+l)==10*m+n){
System.out.println("得到结果"+i+j+"+"+k+l+"="+m+n);
}
}
}
}
}
}
}
}
}
第三题
有1-9 9个数,选取3个数组成以下格式:
??? + ??? = ???
数字只能用一次,不能重复
如:124+659=783
public class demo3 {
public static void main(String[] args) {
int min=1;
int max=9;
for (int i = min; i < max ; i++) {
for(int j=min;j < max ; j++){
for (int k = min; k < max; k++) {
for (int l = min; l < max ; l++) {
for (int m = min; m < max ; m++) {
for (int n = min; n < max ; n++) {
for (int o = min; o < max ; o++) {
for (int p = min; p < max; p++) {
for (int q = min; q < max ; q++) {
if(i != j && j != k && k != l && l !=m && m != n &&
n != o && o != p && p != q && ...
(100*i+10*j+k)+(100*l+10*m+n)==100*o+10*p+q){
System.out.println("得到结果"+i+j+k+"+"+l+m+n+"="+o+p+q);
}
}
}
}
}
}
}
}
}
}
}
}
3个题做下来是不是觉得代码非常繁琐和冗余,这时候就要考虑一些算法了。下面我就来讲讲一个算法。
深度优先搜索算法
又有一个题,有整数1,2,3.对这三个数进行全排列,输出所有的情况。
如 123 132 213
231 321 312
一般情况下就可以使用3个for循环进行循环排列,但很显然这就显得比较的笨重,这时候就可以使用深度优先搜索算法。
/**
* 深度优先搜索算法
*/
public class demo4 {
static int max=3;
static boolean[] flag=new boolean[max];
static int[] data=new int[max];
private static void dfs(int pos){
if(pos ==max){
for(int d :data){
System.out.print(d + ",");
}
System.out.println("\n");
}
for (int i = 0; i < max; i++) {
if(flag[i] == false){
flag[i]=true;
data[pos]=i+1;
dfs(pos+1);
flag[i]=false;
}
}
}
public static void main(String[] args) {
dfs(0);
}
}
第二题
就是刚刚的第三题,也可以使用深度优先搜索算法
有1-9 9个数,选取3个数组成以下格式:
??? + ??? = ???
数字只能用一次,不能重复
如:124+659=783
/**
* 有1-9 9个数,选取3个数组成以下格式:
* ??? + ??? = ???
* 数字只能用一次,不能重复
* 如:124+659=783
* 使用深度优先搜索算法
*/
public class demo5 {
static int max=9;
static boolean[] flag=new boolean[max];
static int[] data=new int[max];
private static void dfs(int pos){
//对所有的结果输出时进行筛选
if(pos == max && 100*data[0]+10*data[1]+data[2]+100*data[3]+10*data[4]+data[5] == 100*data[6]+10*data[7]+data[8]){
System.out.println("得到结果"+data[0]+data[1]+data[2]+"+"+data[3]+data[4]+data[5]+"="+data[6]+data[7]+data[8]);
}
//先把所有全排列的结果全部列出来
for (int i = 0; i < max; i++) {
if(pos == max +1)
return;
if(flag[i] == false){
data[pos]=i+1;
flag[i]=true;
dfs(pos+1);
flag[i]=false;
}
}
}
public static void main(String[] args) {
dfs(0);
}
}