蓝桥杯国赛之图书排列

题目:图书排列

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

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

答案:

    import java.util.*;  
    public class Main {  
        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;  
        }  
//        将a[]中的a[x] 与   a[y]  的值互换
        public static void swap(int a[],int x,int y)  
        {  
            int temp =a[x];  
            a[x]=a[y];  
            a[y]=temp;  
        }  
        public static void sort(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);  
                sort(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};  
            sort(a,0,a.length-1);  
            System.out.println(res);  
        }  

    }  
### 蓝桥杯规则 蓝桥杯作为一项全性专业信息技术事,其阶段是选拔出的优秀选手进一步竞技的重要平台。根据事规则解读[^1],蓝桥杯的参资格通常由省成绩决定,只有在省中获得优异成绩的选手才能晋级至阶段。 的参规则要求选手具备扎实的编程基础和较强的解题能力。比形式一般为现场编程,选手需要在规定时间内完成若干道编程题目。每道题目都有明确的评分标准,包括程序的正确性、时间复杂度、空间复杂度等多方面因素[^1]。 ### 蓝桥杯题目解析 蓝桥杯的题目难度较省更高,涉及的知识点也更加广泛。根据备指南和真题详解[^2],题目通常涵盖算法设计、数据结构应用、数学建模等多个领域。以下是一些常见的题目类型及解析方法: - **算法设计**:如动态规划、贪心算法、分治法等。选手需要熟练掌握这些算法的基本思想,并能灵活应用于实际问题。 - **数据结构应用**:如树、图、堆等数据结构的应用。选手需熟悉这些数据结构的特点及其在复杂问题中的运用。 - **数学建模**:部分题目可能需要将实际问题转化为数学模型进行求解。这要求选手具备一定的数学基础和逻辑思维能力。 以下是一个典型的蓝桥杯题目示例及其解析: #### 示例题目 ```python # 题目描述:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的两个整数,并返回它们的数组下标。 def two_sum(nums, target): hash_map = {} for i, num in enumerate(nums): if target - num in hash_map: return [hash_map[target - num], i] hash_map[num] = i return [] ``` 上述代码通过哈希表优化了查找过程,使得时间复杂度从 O(n^2) 降低到 O(n),非常适合在比中快速实现[^3]。 ### 蓝桥杯时间 蓝桥杯的时间安排通常在每年的5月至6月之间。具体日期会根据当年的比安排有所调整。选手需提前关注官方通知,确保按时参加比[^1]。 ### 注意事项 在备战时,建议选手针对不同知识点进行专项训练,并通过模拟练习熟悉比环境和题型。此外,保持良好的心理状态和充足的休息也是取得好成绩的重要因素[^3]。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

可持续化发展

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值