zwhy


私信TA

用户名:uq_19494209601

访问量:2864

签 名:

等  级
排  名 6449
经  验 1417
参赛次数 0
文章发表 10
年  龄 0
在职情况 学生
学  校
专  业

  自我简介:

解题思路:

注意事项:

参考代码:

import java.util.Scanner;

public class Main {

    static int ans;

    static int N;

public static void main(String[] args) {

Scanner sc = new Scanner(System.in);

    N = sc.nextInt();

int [] arr = {1,2,3,4,5,6,7,8,9};

dfs(0, arr);

        System.out.println(ans);

}

//全排列

public static void dfs(int i,int[] arr) {

if(i == arr.length - 1) {//找到一种排列时

check(arr);//检查放入加号和乘号能否符合要求

return;

}

for (int k = i; k < arr.length; k++) {//对于每一个i位置以后的元素都可放到这个i位置构成一种可能的排列顺序

swap(arr, i, k);

dfs(i + 1, arr);

swap(arr, i, k);//回溯

}

}

public static void check(int[] arr) {

//加号前面的字符数最多有七个

for (int i = 1; i <= 7; i++) {//最少1个最多七个

int num1 = toInt(arr, 0, i);//加号前面的数字

if (num1 >= N) {

continue;

}

//除法前面的数字

for (int j = 1; j < 9 - i; j++) {//最少1个最多7个

int num2 = toInt(arr, i, i + j);

int num3 = toInt(arr, i + j, 9);

if(num2 % num3 == 0 && num1 + num2 / num3 == N) {//需要保证 num2和num3一定是逻辑整除关系

ans++;

}

}

}

}

//转换数字 从最后一位开始遍历

public static int toInt(int[] arr,int start,int end) {

int res = 0;

int mul = 1;//乘数因子

for (int i = end - 1; i >= start; i--) {

res += arr[i] * mul;

mul *= 10;

}

return res;

}

//交换位置代码

public static void swap(int[] arr,int i,int j) {

int tmp = arr[i];

arr[i] = arr[j];

arr[j] = tmp;

}


 

0.0分

1 人评分

  评论区

  • «
  • »