❗❗❗必看:
下列题我全部都使用 Java 语言写的,并且均可以提交成功,获得Accepted 结果的. 如果代码和详解看了之后,对答案有任何疑问,都可以在评论区提出来,我都会一个一个回答.
❗❗❗感谢大家的支持,如果喜欢我的博客,关注 点赞 收藏 评论一波,非常感谢!!!
题目 :不定方程求解
给定正整数a,b,c。求不定方程 ax+by=c 关于未知数x和y的所有非负整数解组数。
Input
一行,包含三个正整数a,b,c,两个整数之间用单个空格隔开。每个数均不大于1000。
Output
一个整数,即不定方程的非负整数解组数。
测试样例
输入
2 3 18
输出
4
代码
//不定方程求解
import java.util.Scanner;
public class Main01 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int a = scanner.nextInt();
int b = scanner.nextInt();
int c = scanner.nextInt();
System.out.println(resultSolutions(a,b,c));
}
private static int resultSolutions(int a, int b, int c) {
int count = 0;
for(int x = 0;x<=c/a;x++) {
if((c-a*x)%b == 0) {
int y = (c-a*x)/b;
if(y>=0) {
count++;
}
}
}
return count ;
}
}
详解
初步思路
使用枚举法,逐一检查每个可能的x值,计算对应的y值,判断其是否为非负整数即可。
具体步骤
- 输入解析: 读取三个正整数a, b, c。
- 枚举法检查每个可能的x值
- 遍历x从0到c//a,这是因为x的最大可能值为c/a,超出这个值时a*x将超c。
- 对于每个x值,计算对应的y值:y = (c - a*x) / b。
- 检查(c - a*x) % b == 0,即y是否为整数。
- 如果y是非负整数,则计数加一。
- 输出结果 : 输出所有符合条件的解的数量。
总结方法
这种方法利用枚举法逐一检查每个可能的x值,结合模运算和简单的代数计算,确定满足条件的非负整数解。这种方法易于理解和实现,在输入范围较小时非常有效。此外,这个方法展示了如何将复杂的问题分解为简单的循环和判断操作,从而找到所有可能的解。