Java实现 蓝桥杯 图书排列(全排列)
2024-09-24 06:04:15
标题:图书排列
将编号为1~10的10本书排放在书架上,要求编号相邻的书不能放在相邻的位置。
请计算一共有多少种不同的排列方案。
注意,需要提交的是一个整数,不要填写任何多余的内容。
9 9
10 9
9 9
9 9
9 10
7 7
9 7
package 第三次模拟;
public class Demo3图书排列 {
static int res=0;
public static boolean check(int a[])
{
int l=a.length;
for(int i=0;i<l-1;i++)
{
// 两个相邻的元素,如果它们的数字是相邻的,就是两个元素相减的绝对值 == 1;那么就return false;
if(Math.abs(a[i]-a[i+1])==1)
{
return false;
}
}
return true;
}
// static int count=0;
// 将a[]中的a[x] 与 a[y] 的值互换
public static void swap(int a[],int x,int y)
{
//位运算转换节省内存,如果x==y的话,无需转换
if(x==y) return;
a[x]^=a[y];
a[y]^=a[x];
a[x]^=a[y];
// int temp =a[x];
// a[x]=a[y];
// a[y]=temp;
}
public static void dfs(int a[],int begin,int end)
{
if(begin==end)
{
// 检查相邻的书是否被放在了相邻的位置 :以数字来代表书;相邻两个数字的差的绝对值要不等于1
if(check(a))
// 如果相邻的两个数字的差的绝对值不等于1,则找到了一种方案。
res++;
}
for(int i = begin; i <= end; i++)
{
swap(a,begin,i);
dfs(a,begin+1,end);
swap(a,begin,i);
}
}
public static void main(String[] args) {
int a[]={1,2,3,4,5,6,7,8,9,10};
dfs(a,0,a.length-1);
System.out.println(res);
}
}
最新文章
- ACL权限设置命令setfacl和getfacl命令
- jQuery使用之(三)处理页面的元素
- linux 回收站的添加
- 使用异步 I/O 大大提高应用程序的性能
- JVM问题定位工具
- 常见的mongodb可视化工具
- KM算法的应用
- C语言中关于运算符优先级别
- shell脚本中调用另一个脚本的三种不同方法(fork, exec, source)
- React Native之AppRegistry模块
- Python爬取谷歌街景图片
- python遍历文件
- springmvc中messageConverter用法
- Django中各目录文件的作用
- python教程_1
- maven下的jar项目打包的方法
- Java 之 POI各Jar包作用
- iOS 性能调优
- 连接数据库-corina
- 51 Nod 1107 斜率小于0的连线数量 (转换为归并求逆序数或者直接树状数组,超级详细题解!!!)
热门文章
- springBoot整合Spring-Data-JPA, Redis Redis-Desktop-Manager2020 windows
- python3语法学习第四天--序列
- [hdu4552]最长公共前缀
- Semaphore和AQS
- 使用IDEA远程向伪分布式搭建的Hadoop提交MapReduce作业
- Python 简明教程 --- 2,第一个Python 程序
- 小程序-云开发 bindscroll滚动事件执行setData()方法,导致scroll-view视图抖动
- ql的python学习之路-day6
- E. Physical Education Lessons 动态开辟线段树区间更新
- poj2778 AC自动机