P8395 [CCC 2022 S1] Good Fours and Good Fives 题解

题意简述


给出一个整数 nn

问有多少种情况,使 nn 能被拆分成若干个 44 和若干个 55 相加。

解题思路


我们设能被拆分成 xx44yy55

这样可以列出方程:

4x+5y=n4 \cdot x + 5 \cdot y = n

但显然枚举 xxyy 的值会超时。

所以拿出我们初一的数学知识:整数解问题

我们用含 yy 的代数式表示 xx(当然用含 xx 的代数式表示 yy 也可以),有以下方程。

x=n5y4x = \dfrac{n - 5 \cdot y}{4}

之后枚举 yy 的值即可。

这里要注意,yy 的值可能为 00,所以我们要从 00 开始枚举。

代码实现


#include<bits/stdc++.h>
using namespace std;
int n,ans=0;
int main() {
	scanf("%d",&n);
	for(int i=0;i<=n;i++) {
		if((n-5*i)<0) break;
		if((n-5*i)%4==0) ans++;
	}
	printf("%d",ans);
	return 0;
}
//code by TheCedar