关于dfs排列的一类小问题的暴力解法

一、前言

这篇文章稍微总结一类用dfs的全排列解决的从1到9选数的问题。

各个oj相关题目链接如下:

1.1209. 带分数 - AcWing题库

2.C-排列式_算法综合训练1—程序结构 (nowcoder.com)(此题答案直接给出,但建议自己编写程序解决)

3.P1008 [NOIP1998 普及组] 三连击 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

4.P1618 三连击(升级版) - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

二、分析

1.特征:这类问题的特征是使用1~n(1<=n<=9,n为整数)各一次组成不同的数,进而求满足条件的组数。为什么n是1到9的整数呢,因为1s内最多只能求出9的所有全排列。

2.思路:先求出所有全排列,然后用for循环枚举特殊的位置,以第一题为例;可以用两个for循环分别枚举加号和分号的位置,然后根据函数求出在几个符号之间的数的大小进而进行进一步的判断;关键代码如下:

for(int i=1;i<=ans;i++)
        for(int j=1;j<8;j++)
            for(int k=j+1;k<9;k++)
            {
                  int num2=cal2(base[i],1,j);
                  int num3=cal2(base[i],j+1,k);
                  int num4=cal2(base[i],k+1,9);
                  if(num3%num4==0&&target==num2+num3/num4)cnt++;
            }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值