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;	
	}
}

大佬多多指正

### 回答1: 根据山水达式的定义,第n项为 (-1)^(n-1) / (2n-1),因此可以利用公式计算出前20项的值,然后将它们相加: 1 - 1/3 + 1/5 - 1/7 + 1/9 - 1/11 + 1/13 - 1/15 + 1/17 - 1/19 + ... ≈ 0.760459904732351 注意:这个是无理,不能用有限的小表示。 ### 回答2: 山水达式是一个学公式,其形式为1-1/3-1/5-1/7-...-1/n,其中n是一个整要求求解1-1/3-1/5-1/7-...-1/n的值。 首先,我们将山水达式的每一项分别求出来,然后将它们相加。首先计算1-1/3,可以得到结果2/3。接下来计算2/3-1/5,得到结果7/15。再计算7/15-1/7,得到结果31/105。继续计算31/105-1/9,得到结果139/945。以此类推,可以得到每一项的结果。 然后,我们将每一项的结果相加。对于1-1/3-1/5-1/7-...-1/20这个表达式而言,我们将其写成分的形式,并将分子的结果相加,分母保持不变。最终的结果就是这个分。 通过以上方法,我们可以得到1-1/3-1/5-1/7-...-1/20的值。由于题目要求300字,因此我无法一一列举出每一项的计算过程和最终结果。但是你可以按照我给出的方法,依次计算每一项的结果,并将分子相加,分母保持不变,得出最终结果。 总之,山水达式1-1/3-1/5-1/7-...-1/n的值可以通过分别计算每一项的结果,并将分子相加,分母保持不变得到。 ### 回答3: 山水达式是一个特殊的无穷序列,其每一项由1减去1/3,然后再减去1/5,依次类推。我们需要计算这个序列的和,其中序列的项从1到20。 要计算这个序列的和,我们可以利用学上的知识和一些技巧来简化计算过程。 首先,我们可以观察到序列中的每一项都是以2为分母的倒。所以我们可以将每一项的分子都统一为2,这样序列就变成了1/2 - 1/6 + 1/10 - 1/14 + ...的形式。 然后,我们可以将这个序列中的每一项分解成两个分的差。例如,1/2 - 1/6 可以分解为(1/2 - 1/3) + (1/3 - 1/6)。 利用这个分解的方法,我们可以将序列拆分成许多项,每一项都是两个相邻的分之差。这样,对于序列1/2 - 1/6 + 1/10 - 1/14 + ...来说,我们可以将其拆分成以下这样的多个项: (1/2 - 1/3) + (1/3 - 1/6) + (1/6 - 1/10) + (1/10 - 1/14) + ... 接下来,我们可以将相邻项相加进行简化。例如,(1/2 - 1/3) + (1/3 - 1/6) 可以简化为1/2 - 1/6,也就是1/3。 我们可以发现,无论有多少项,每一次简化后的结果都是1/3。 所以,我们可以得出结论,序列1-1/3-1/5-...的和,其中序列的项从1到20,等于1/3乘以项。 因此,这个山水达式的值为1/3乘以20,即20/3。 综上所述,山水达式1-1/3-1/5-...的值,其中1到20的项是20个,等于20/3。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值