第八届蓝桥杯决赛 图书排列

    xiaoxiao2022-06-27  171

    标题:图书排列

    将编号为1~10的10本书排放在书架上,要求编号相邻的书不能放在相邻的位置。 请计算一共有多少种不同的排列方案。

    注意,需要提交的是一个整数,不要填写任何多余的内容。

    答案:479306

    分析

    简单题,只要dfs求出所有的排列情况,然后筛选出满足条件的排列情况并计算数目即可。注意点:如果不放心自己求出的结果,可以把满足条件的情况输出,方便排错。 //发现我会写全排列hhh

    代码如下

    public class Main { public static boolean visit[]=new boolean[10]; public static int a[]=new int [10]; public static int ans=0; public static boolean check() { for(int i=0;i<9;i++) if(a[i]==a[i+1]+1 || a[i]==a[i+1]-1) return false; return true; } public static void dfs(int x) { if(x==10) { if(check()) { ans++; // output conditions // for(int i=0;i<10;i++) // System.out.print(a[i]+" "); // System.out.println(); } return; } for(int i=0;i<10;i++) { if(!visit[i]) { visit[i]=true; a[x]=i; dfs(x+1); visit[i]=false; } } } public static void main(String[] args) { dfs(0); System.out.println(ans);//output the result } }

    最新回复(0)