数的分解
时间限制: 1.0s 内存限制: 512.0MB
【问题描述】
把 n分解成 3 个各不相同的正整数之和,并且要求每个正整数都不包 含数字 2和 4,一共有多少种不同的分解方法?
注意交换 3 个整数的顺序被视为同一种方法,例如 1999+3+18 和 1999+18+3 被视为同一种。
【输入格式】
输入一行包含一个整数 n。
【输出格式】
输出一行,包含一个整数,表示满足条件的分解方法种数。
【样例输入】
2019
【样例输出】
40785
【评测用例规模与约定】
对于所有评测用例,100 ≤ n ≤ 2500。
主要思路:首先要写一个外部的函数,判断是否包含2和4,然后需要注意的是不能用 三个for循环写,因为三个for循环时间会超,所以可以用两个for循环,然后第三个数用n减去已经知道的两个数。
代码:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(sc.hasNext()) {
int index=0;
int n = sc.nextInt();
if(n<100||n>2500)return;
long bt = System.currentTimeMillis();
for(int i=1;i<n;i++) {
if(pd(i))continue;
for(int j=1;j<n;j++) {
if(pd(j))continue;
if(pd(n-i-j))continue;
if(n-i-j!=i&&n-i-j!=j&&i!=j&&n-i-j>0)index++;
}
}
long et = System.currentTimeMillis();
System.out.println(index/6);
System.out.println(et-bt+"ms");
}
}
public static boolean pd(int x) {
boolean a=true;
while(x!=0) {
if(x%10==2||x%10==4) {
a=false;
break;
}
x=x/10;
}
if(a)return false;
else return true;
}
}
大佬多多指正