题目
样例
解题思路
1、 式子可以进行变形,我们需要得到3个满足式子条件的数,这3个数,必须包含1-9这几个数字,并且不能重复,所有可以将3个数字表示起来,拼接成字符串。
2、 一个for循环,首先从1开始,然后第二个for循环,例如100 = 3 + 69258 / 714;n=i+x/j这个式子的第一个数用第一个for循环表示,限制是不能大于n,最后一个数用另另一个for循环,不用设置范围,因为他要被其他数除,中间数字就可以表示为(n-i)*j.
3、 这样最后的字符串组合起来一定符合包含1-9数字,并且长度为9,在判断的时候,长度超过了要求,直接break即可。
参考代码
package com.ccl.study;
import java.util.Scanner;
public class daifenshu {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int num = 0;
String s;
int n = sc.nextInt();
for (int i = 1; i < n; i++) {
for (int j = 1;; j++) {
s = String.valueOf(i) + String.valueOf((n - i) * j) + String.valueOf(j);
if (s.length() >= 10) {
break;
} else {
if (s.length() == 9 && s.contains("1") && s.contains("2") && s.contains("3") && s.contains("4")
&& s.contains("5") && s.contains("6") && s.contains("7") && s.contains("8")&& s.contains("9"))
num++;
}
}
}
System.out.println(num);
}
}
全排列
package com.ccl.study;
import java.util.Arrays;
public class quanpailie {
static int[] arr= {1,2,3};
public static void main(String[] args) {
qpl(0);
}
public static void qpl(int k) {
if(k==arr.length) {
System.out.println(Arrays.toString(arr));
return;
}
for(int i=k;i<arr.length;i++) {
int temp=arr[i];
arr[i]=arr[k];
arr[k]=temp;
qpl(k+1);
temp=arr[i];
arr[i]=arr[k];
arr[k]=temp;
}
}
}
全排列可以当成是一种递归的思想,首先记录一下数组的开始位置,然后从开始的位置开始交换后面的,然后再把起始位置加1,最后还要把交换的在换回来这样不影响后面的交换。