【蓝桥杯备战】全排列函数

文章介绍了C++中的next_permutation和prev_permutation函数,用于计算序列的全排列。通过蓝桥杯竞赛的题目展示了如何运用这些函数解决实际问题,包括汉字数字的排列和算式的求解。对于复杂情况,如带分数的表示,文章提出了挡板法和组合策略来解决排列问题。
摘要由CSDN通过智能技术生成

计算序列全排列的函数: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不重复不遗漏地组成带分数表示的全部种数。注意:不要求输出每个表示,只统计有多少表示法!

解析:这个也是一个是算数题,但是它的每一个数的位数是不确定的,所以简单的循环+全国排列是不能够解决问题

  1. 挡板法数学排列组合

  1. 通过两个for循环来确定挡板的位置

  1. 通过两个for循环来确定挡板的位置

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

咻白

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

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

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

打赏作者

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

抵扣说明:

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

余额充值