/*小明是个急性子,上小学的时候经常把老师写在黑板上的题目抄错了。
有一次,老师出的题目是:36 x 495 = ?他却给抄成了:396 x 45 = ?
但结果却很戏剧性,他的答案竟然是对的!!
因为 36 * 495 = 396 * 45 = 17820
类似这样的巧合情况可能还有很多,比如:27 * 594 = 297 * 54
假设 a b c d e 代表1~9不同的5个数字(注意是各不相同的数字,且不含0)
能满足形如: ab * cde = adb * ce 这样的算式一共有多少种呢?
请你利用计算机的优势寻找所有的可能,并回答不同算式的种类数。
满足乘法交换律的算式计为不同的种类,
所以答案肯定是个偶数。*/
//解法一:
/*import java.util.ArrayList;
import java.util.List;
public class 马虎的算法 {
static int count = 0;
public static void check(List<Integer> lis) {
int a = lis.get(0);
int b = lis.get(1);
int c = lis.get(2);
int d = lis.get(3);
int e = lis.get(4);
int l = (a * 10 + b) * (c * 100 + d * 10 + e);
int r = (a * 100 + d * 10 + b) * (c * 10 + e);
if (l == r) {
count++;
}
}
// 在1~9里 的5个数全排列
public static void f(List<Integer> lis, int start, int end) {
if (start == end) {
check(lis);
return;
}
for (int i = 1; i <= 9; i++) {
if (!lis.contains(i)) {
lis.set(start, i);
} else {
continue;
}
f(lis, start + 1, end);
lis.set(start, 0);
}
}
public static void main(String[] args) {
List<Integer> lis = new ArrayList<Integer>();
for (int i = 0; i < 5; i++) {
lis.add(0); // 初始化为全0
}
f(lis, 0, 5); // 在1~9里 的5个数全排列
System.out.println(count);
}
}*/
// 解法二
/*public class 马虎的算法 {
static int kinds = 0;
static int a[] = new int[6];
static boolean vis[] = new boolean[10];
static void check(int a[]) {
int b = a[1] * 10 + a[2];
int c = a[3] * 100 + a[4] * 10 + a[5];
int d = a[1] * 100 + a[4] * 10 + a[2];
int e = a[3] * 10 + a[5];
if (b * c == d * e)
kinds++;
}
static void dfs(int start, int end) {
if (start == end) {
check(a);
} else {
for (int i = 1; i < 10; i++) {
if (vis[i])
continue;
a[start] = i;
vis[i] = true;
dfs(start + 1, end);
vis[i] = false;
}
}
}
public static void main(String[] args) {
dfs(1, 6);
System.out.println(kinds);
}
}*/
//解法3
/*import java.util.ArrayList;
import java.util.List;
public class 马虎的算法{
static int kinds= 0; // 记录个数
public static void check(List<Character> lis) {
int a = lis.get(0)-'0';
int b = lis.get(1)-'0';
int c = lis.get(2)-'0';
int d = lis.get(3)-'0';
int e = lis.get(4)-'0';
int l = (a * 10 + b) * (c * 100 + d * 10 + e);
int r = (a * 100 + d * 10 + b) * (c * 10 + e);
if (l == r) {
kinds++;
}
}
// m排n全排列
public static void f(List<Character> lis,char[] c,int start,int end){
if(start==end){
check(lis);
return ;
}
for(int i=0;i<c.length;i++){
if(!lis.contains(c[i])){
lis.set(start, c[i]);
}else{
continue;
}
f(lis,c,start+1,end);
lis.set(start, '0');
}
}
public static void main(String[] args) {
int n = 5;
char[] c = "123456789".toCharArray();
List<Character> lis = new ArrayList<Character>();
for(int i=0;i<n;i++){
lis.add('0');
}
f(lis,c,0,5);
System.out.println("排列个数:"+kinds);
}
} */
//解法四
import java.util.ArrayList;
import java.util.List;
public class 马虎的算法 {
static int kinds= 0; // 记录个数
public static void check(List<Character> lis) {
int a = lis.get(0)-'0';
int b = lis.get(1)-'0';
int c = lis.get(2)-'0';
int d = lis.get(3)-'0';
int e = lis.get(4)-'0';
int l = (a * 10 + b) * (c * 100 + d * 10 + e);
int r = (a * 100 + d * 10 + b) * (c * 10 + e);
if (l == r) {
//System.out.println(lis);
kinds++;
}
}
public static char[] is = new char[] { '1', '2', '3', '4', '5', '6', '7', '8', '9'};
public static void f(List<Character> lis, int start,int end) {
if(start == end) {
check(lis);
return ;
}
List<Character> lis1;
for(int i = 0; i < is.length; i++) {
lis1 = new ArrayList<Character>();
lis1.addAll(lis);
if(!lis.contains(is[i])) {
lis1.add(is[i]);
f(lis1,start+1,end );
}
}
}
public static void main(String[] args) {
List<Character> lis = new ArrayList<Character>();
f(lis,0,5);
System.out.println(kinds);
}
}
马虎的算式
最新推荐文章于 2023-11-15 19:43:36 发布