如何找出指定范围中的最大模数值?附Java实现代码
找出1到n的数对m取模的最大值的Java实现
嘿,我看你已经写出了一段能完美实现需求的Java代码啦!先给你点个赞😉
你的代码逻辑很清晰,先来看下完整的实现:
import java.util.*; public class p2 { public static void main(String[] args) { ArrayList<Integer> ar = new ArrayList<>(); Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int m = sc.nextInt(); for(int i = 1; i <= n; i++) { int mod = i % m; ar.add(mod); } System.out.println(Collections.max(ar)); } }
代码逻辑拆解
- 首先创建一个
ArrayList用来存储1到n每个数对m取模的结果 - 通过
Scanner获取输入的两个整数:n是我们要遍历的范围上限,m是模数 - 循环遍历1到n的每一个数,计算
i % m得到模值,把结果添加到列表里 - 最后调用
Collections.max()方法直接找出列表中的最大值并输出
举个例子验证
比如输入5和3时:
1到5的数分别对3取模,得到的结果是1、2、0、1、2,其中最大的模数值就是2,和代码的输出完全一致,没问题!
小优化建议(可选)
其实我们完全不需要存储所有的模值,通过数学规律就能直接得出结果:
- 如果
n >= m,那最大模值肯定是m-1(因为m-1对m取模就是它本身,而且只要n不小于m,这个数一定在1到n的范围内) - 如果
n < m,那最大模值就是n(因为n比m小,n对m取模就是它自己)
基于这个规律,我们可以写出更高效的代码,节省内存空间(尤其是当n很大的时候):
import java.util.Scanner; public class p2 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int m = sc.nextInt(); int maxMod = n >= m ? m - 1 : n; System.out.println(maxMod); } }
内容的提问来源于stack exchange,提问作者TimothyW553
相关产品推荐
相关产品推荐

