数学知识的应用
2018-03-19 00:15
239 查看
A A 2 2 3 3 4 4, 一共4对扑克牌。请你把它们排成一行。 要求:两个A中间有1张牌,两个2之间有2张牌,两个3之间有3张牌,两个4之间有4张牌。 请填写出所有符合要求的排列中,字典序最小的那个。 例如:22AA3344 比 A2A23344 字典序小。当然,它们都不是满足要求的答案。
解题思路:该方法的巧妙之处在于,将所有的元素进行了全排列,然后将满足要求的元素放入set中,而由于集合中存放的是不重复的元素,因而可起到过滤的作用
代码如下:
package sf_07; import java.util.Set; import java.util.TreeSet; public class Main { public static Set<String> set=new TreeSet<String>(); /** * @param args */ public static void test(char[] a){ String s=new String(a); if(s.lastIndexOf('A')-s.indexOf('A')!=2) return; if(s.lastIndexOf('2')-s.indexOf('2')!=3) return; if(s.lastIndexOf('3')-s.indexOf('3')!=4) return; if(s.lastIndexOf('4')-s.indexOf('4')!=5) return; set.add(s); } public stat 4000 ic void f(char da[],int k){ if(k==da.length){ test(da); return; } for(int i=k;i<da.length;i++){ {char r=da[k];da[k]=da[i];da[i]=r;} f(da,k+1); {char r=da[k];da[k]=da[i];da[i]=r;} } } public static void main(String[] args) { // TODO Auto-generated method stub char[] da="AA223344".toCharArray(); f(da,0); for(Object s:set){ System.out.println(s); } } }
相关文章推荐
- 数学知识在地图开发中的应用
- 编程中数学知识的应用
- 数学/物理知识在软件/算法中应用(1)
- 蓝桥杯赛前冲刺补习第四课——《数学知识的应用》
- 数学知识的应用(一步之遥--暴力、欧几里得)
- 【Cocos2D学习】Lua——数学知识的基本应用
- 【知识贴】战争中的数学应用
- 【Unity引擎学习】数学知识在游戏开发中的应用
- SGU261 一些数学知识入门与应用结合 原根 快速幂 离散对数 扩展欧几里得 单边元模线性方程
- 数学知识的应用(天枰称重)
- 数学知识的应用(日期差问题)
- 【知识贴】战争中的数学应用
- ACM-数学知识的算法应用
- 数学知识的应用(模m运算)
- 数学知识的应用(使用了BigInteger,1/3+1/6=1/2)
- 数学基础知识——三线插值
- 数学之美 系列七 -- 信息论在信息处理中的应用
- DirectX学习笔记--3D基本数学知识整理
- 理论与数学应用互助交流QQ群(6314910) 简介【谢绝转载】
- MQ实现两个应用系统之间的通信----理论知识(一)