【Java/算法/排列】由数字1,2,3,4,5组成,没有重复数字的五位数,其中小于50000的偶数共有几个? 并请列出这些数字
【数学解法】
该题分三步:
1.个位:2,4选一,C21;
2.万位:1,2,3,4皆可,但要去掉放在个位的一个,C31;
3.千百十位:三个全排,A33;
Sum=C21*C31*A33=2*3*3*2*1=6*6=36种
【代码解法】
思路:将12345全排列,过滤掉首数为五的和尾数不是偶数的。
SixtySix类:
package test230425; import java.util.List; import arrange.Arranger; /** * 由数字1,2,3,4,5组成,没有重复数字的五位数,其中小于50000的偶数共有几个? * 并请列出这些数字 * */ public class SixtySix { public static void main(String[] args) { int[] arr = { 1, 2, 3, 4, 5 }; Arranger arranger = new Arranger(arr); int idx = 0; for (List<Integer> res : arranger.getResults()) { int first=res.get(0); int last=res.get(4); if(first<5 && (last % 2==0)) { String num=""+res.get(0)+res.get(1)+res.get(2)+res.get(3)+res.get(4); System.out.println(String.format("%02d",++idx)+"."+num); } } } }
Arranger类:
package arrange; import java.util.ArrayList; import java.util.List; /** * 用于产生数组全排列结果的工具类 * @since 2023/4/21 */ public class Arranger { // 保存在内部的原始元素数组的引用 private int[] rawArr; // 返回结果 private List<List<Integer>> results; /** * 构造函数 * * @param raws 原始元素数组 */ public Arranger(int[] raws) { rawArr = raws; results = new ArrayList<>(); doArrange(new ArrayList<>()); } /** * 使用递归进行全排列,结果放在results中 * * @param initialList 初始链表 */ private void doArrange(List<Integer> initialList) { List<Integer> innerList = new ArrayList<>(initialList); if (rawArr.length == initialList.size()) { results.add(innerList); } for (int i = 0; i < rawArr.length; i++) { if (innerList.contains(rawArr[i])) { continue; } innerList.add(rawArr[i]); doArrange(innerList); innerList.remove(innerList.size() - 1); } } /** * 获得结果链表的引用 * * @return */ public List<List<Integer>> getResults() { return results; } // 测试 public static void main(String[] args) { int[] numbers = { 1, 2, 3,4,5}; Arranger arranger = new Arranger(numbers); int idx = 0; for (List<Integer> re : arranger.getResults()) { System.out.println(String.format("%02d", ++idx) + "." + re); } } }
【输出】
01.12354 02.12534 03.13254 04.13452 05.13524 06.13542 07.14352 08.14532 09.15234 10.15324 11.15342 12.15432 13.21354 14.21534 15.23154 16.23514 17.25134 18.25314 19.31254 20.31452 21.31524 22.31542 23.32154 24.32514 25.34152 26.34512 27.35124 28.35142 29.35214 30.35412 31.41352 32.41532 33.43152 34.43512 35.45132 36.45312
程序和数学分析可以相互印证。
END
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
2022-04-25 SpringBoot中控制器如何接纳前台传来的含列表数据
2020-04-25 ElasticsSearch初装 环境Win10
2019-04-25 【高中数学/基本不等式】已知:x>0,y>-1,且x+y=1 求:(x^2+3)/x+y^2/(y+1)的最小值为?
2018-04-25 【高中数学/极值/基本不等式】已知正数a,b满足a+4b+2ab=6,则a+4b的最小值为?
2018-04-25 【Nodejs】cheerio简单示例
2018-04-25 【Nodejs】nimble或async并不能保证程序串行执行,回调是回避不了的坑
2015-04-25 安全驾驶技巧