带分数DFS小白讲解

带分数

https://ac.nowcoder.com/acm/problem/14353

我这里是用了dfs进行全排列解答,
需要注意的一点就是题目描述不能有零 (N = x + dmo/mo //x、dmo、mo 每一位上都不能有零),
从1到N进行遍历然后利用dfs全排列即可,具体细节请看代码:

#include <iostream>
#include <cstring>
#include <cmath>
#include <set>
#include <stack>
#include<algorithm>
using namespace std;

typedef long long ll;
#define IOS ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);

int ans=0,b[10]={0},a[10],x;  //答案,标记数组,排列数组,遍历变量
int N;  //输入

bool check(){  //检查现在的全排列能否构成带分数
    int s=x,w=0;
    while(s){
        w++;
        s/=10;
    }
    int dmo=0,mo=0; //分母,分子
    int pos=(9-w)/2+w;
    for(int i=pos;i<=8;i++){  //遍历分母分子间隔点
        dmo=mo=0;
        for(int j=w+1;j<=i;j++){
            dmo*=10;
            dmo+=a[j];
        }
        for(int j=i+1;j<=9;j++){
            mo*=10;
            mo+=a[j];
        }
        if(dmo%mo==0){  //需要判断是否整除
            if(x+dmo/mo==N){
                return true;
            }
        }
    }
    return false;
}

void dfs(int step){   //对1~9剩下的数的全排列
    if(step>9){
        if(check())
            ans++;
        return ;
    }
    for(int i=1;i<=9;i++){
        if(b[i]==0){
            b[i]=1;  //标记
            a[step]=i;
            dfs(step+1);
            b[i]=0;
        }
    }
}


int main(){
    cin >> N;
    for(int i=1;i<N;i++){  //遍历
        int flag=1;
        x=i;   //记录当前标记的数,这里用的全局变量
        int w=0,s=i;  //记录当前数的位数和定义中间变量标记数组
        memset(b,0,sizeof b);
        while(s){  //检查当前的数有几位
            w++;
            if(b[s%10]==0)  //标记当前数的每一位
                b[s%10]=1;
            else
                flag=0;
            if(s%10==0)  //题目描述不能有零
                flag=0;
            s/=10;
        }
        if(flag)
            dfs(w+1);  //从现在遍历的数后面一位进行全排列
    }
    cout << N << " " << ans;
}

以上是本小白的讲解,有什么不对还请大佬们指正。

全部评论

相关推荐

小浪_Coding:找硬件测试,也可兼顾软测欧, 简历还可以的 ,注意排版,项目写的有条理一点, 然后个人技能多加点, 润色好简历之后就开始沟通海投了,深圳,东莞这边做硬件相关的公司还不少, 医疗类,仪器类的都可以尝试
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-10 15:58
投个小米提前批试试水,先投一个岗位看看形势,不行就再沉淀一下投第二个岗位,莫辜负
Java抽象带篮子:我嘞个骚刚,已经开始研发6g了吗
投递小米集团等公司7个岗位
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务