计算序列全排列的函数:next_permutation(start,end),和prev_permutation(start,end),这两个函数作用是一样的,区别就在于前者求的是当前排列的下一个排列,后一个求的是当前排列的上一个排列
要引用头文件:# include <algorithm>
函数的算法原理:对序列{a,b,c},每一个元素都比后面的小,按照字典序列,固定a之后,a比bc都小,c比b大,它的下一个序列即为{a, c, b},而{a, c, b}的上一个序列即为{a, b, c},同理可以推出所有的六个序列为:{a, b, c}、{a, c, b}、{b, a, c}、{b, c, a}、{c, a, b}、{c, b, a},其中{a, b, c}没有上一个元素,{c, b, a}没有下一个元素
[2015年第六届C B组蓝桥杯省赛真题]
观察下列算式,其中,相同的汉字代表相同的数字,不同的汉字代表不同的数字。请你填写“三羊献瑞”所代表的4位数字(答案唯一),已知“三”代表数值1。
【方法一】暴力求解法,这里有7个汉字是未知的,可以使用7层循环暴力求解
【方法二】使用全排列函数求解
把他们所有可能代表的数放在一个数组里面,数组的前六个就表示对应的六个字,利用全排列函数对数组进行全排列,求出满足题目要求的排列。
[2016年第六届C B组蓝桥杯省赛真题]
这个算式中A-I代表1-9的数字,不同的字母代表不同的数字。
比如:6+8/3+952/714 就是一种解法,5+3/1+972/486 是另一种解法。
这个算式一共有多少种解法?
B DEF
A + —- + ——— = 10
C GHI
同上题一样,也可以利用两种方法进行求解,相对于第一题来说有9层循环可以依照第一个题目试着做一下。
[2013年第四届C B组蓝桥杯省赛真题]
100可以表示为带分数的形式:100=3+69258/714,还可以表示为:100=82+3546/197,注意特征:带分数中,数字1~9分别出现且只出现一次(不包含0)。类似这样的带分数,100有11种表示法。
题目要求:从标准输入读入一个正整数N(N<1000*1000)程序输出该数字用数码1~9不重复不遗漏地组成带分数表示的全部种数。注意:不要求输出每个表示,只统计有多少表示法!
解析:这个也是一个是算数题,但是它的每一个数的位数是不确定的,所以简单的循环+全国排列是不能够解决问题
挡板法数学排列组合
通过两个for循环来确定挡板的位置
通过两个for循环来确定挡板的位置