填算式(使用全排列处理)

问题描述

看这个算式:
☆☆☆ + ☆☆☆ = ☆☆☆
如果每个五角星代表 1 ~ 9 的不同的数字。
这个算式有多少种可能的正确填写方法?
173 + 286 = 459
295 + 173 = 468
173 + 295 = 468
183 + 492 = 675
以上都是正确的填写法!
注意:
111 + 222 = 333 是错误的填写法!
因为每个数字必须是不同的!
也就是说: 1~9中的所有数字,每个必须出现且仅出现一次!
注意:
不包括数字“ 0”!
注意:
满足加法交换率的式子算两种不同的答案。
所以答案肯定是个偶数!
注意:
只要求计算不同的填法的数目
不要求列出所有填写法
更不要求填写源代码!

java代码实现

package mec.lanqiao;

public class Main {
     public static int cnt = 0;

     static void swap(int [] arr , int a, int b) {
          int temp = arr [a ];
          arr[ a] = arr[ b];
          arr[ b] = temp;
     }

     static boolean check(int [] arr ) {
          int a = arr [0] * 100 + arr[1] * 10 + arr[2];
          int b = arr [3] * 100 + arr[4] * 10 + arr[5];
          int c = arr [6] * 100 + arr[7] * 10 + arr[8];
          if (a + b == c )
               return true ;
          return false ;
     }

     static void permutation(int[] arr, int begin, int end) {
          if (end - begin <= 0) {
               if (check( arr)) {
                   cnt++;
                   // for (int i = 0; i < arr.length; i++) {
                   // System.out.print(arr[i]);
                   // if (i == 2)
                   // System.out.print("+");
                   // if (i == 5)
                   // System.out.print("=");
                   // }
                   // System.out.println();
              }
         } else {
               for (int i = begin ; i <= end ; i ++) {
                   swap(arr, begin, i);
                   permutation(arr, begin + 1, end);
                   swap(arr, begin, i);
              }
         }
     }

     public static void main(String[] args) {
          int[] arr = new int[9];
          for (int i = 0; i < arr .length ; i ++) {
               arr[ i] = i + 1;
         }
          permutation(arr, 0, arr.length - 1);
         System. out.println(cnt );
     }
}

运行结果:控制台输出总数336
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值