蓝桥杯C++ B组---带分数

题目描述

100 可以表示为带分数的形式:100=3+69258714
还可以表示为:100=82+3546197
注意特征:带分数中,数字 1∼9 分别出现且只出现一次(不包含 0)。

类似这样的带分数,100 有 11 种表示法。

输入格式

一个正整数

输出格式

输出输入数字用数码 1∼9 不重复不遗漏地组成带分数表示的全部种数。

数据范围

1 ≤ N < 1 0 6 10^6

输入样例1

100

输出样例1

11

输入样例1

105

输出样例1

6

算法思路
首先用bfs暴力枚举1-9所有的数,再用两重循环将数分为a, b, c三个数只要满足n = a + b/c 即为 cn = ca + b
则答案+1

代码如下

#include <iostream>
using namespace std;

const int N = 1000010;
int n, num[10], ans;
bool visit[10];

int sum(int l, int r)//求和
{
    int res = 0;
    for(int i = l; i <= r; i++)
    {
        res = res * 10 + num[i];
    }
    return res;
}

void dfs(int u)
{
    if(u == 9)
    {
        for(int i = 0; i < 8; i++)//将9个数分为3组
        {
            for(int j = i + 1; j < 8; j++)
            {
                int a = sum(0, i);
                int b = sum(i + 1, j);
                int c = sum(j + 1, 8);
                if((n * c) == (a * c + b)) ans++;
            }
        }
        return ;
    }
    for(int i = 1; i <= 9; i++)//bfs模板
    {
        if(!visit[i])
        {
            visit[i] = true;
            num[u] = i;
            dfs(u + 1);
            visit[i] = false;
        }
    }
    return ;
}

int main(void)
{
    cin >> n;
    dfs(0);
    cout << ans << endl;
    return 0;
}
发布了20 篇原创文章 · 获赞 2 · 访问量 877

猜你喜欢

转载自blog.csdn.net/zhbbbbbb/article/details/104750169
今日推荐