马虎的算式

来源:互联网 发布:php gb2312转utf8 编辑:程序博客网 时间:2024/06/08 06:24
/*小明是个急性子,上小学的时候经常把老师写在黑板上的题目抄错了。       有一次,老师出的题目是: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);      }  } 

原创粉丝点击