解题思路:
dfs:可以从2开始往后暴力搜索,看每个数是否能被所给定的两个数凑到,输出最后一个凑不到的数。
数学知识:当两个数m和n的最大公约数为1时,从某个数x开始,之后的数一定可以被凑成,且这个数 x = ( m - 1) * ( n - 1) = m * n - m - n。
Java代码:(dfs)(超时)
import java.util.Scanner;
public class Main {
static int n;
static int m;
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
n = scan.nextInt();
m = scan.nextInt();
scan.close();
int ans = 2;
for(int i = 2; i <= 1000; i++) {
if(!dfs(i)) ans = i;//判断第i个数是否能被凑成
}
System.out.println(ans);
}
public static boolean dfs(int x) {
if(x == 0) return true;//正好被分解完
if(x >= n && dfs(x - n)) return true;//在x-n为非负数时进行拼凑
if(x >= m && dfs(x - m)) return true;
return false;
}
}
Java代码:(数学)AC
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
int m = scan.nextInt();
scan.close();
System.out.println(n * m - n - m);
}
}