2020-8/30 数的分解

数的分解
时间限制: 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;	
	}
}

大佬多多指正

猜你喜欢

转载自blog.csdn.net/weixin_45956597/article/details/108310397