前言

枚举如何聪明的枚举?那就是优化啦!下面梳理之前做过的一个暴力枚举的题,想了蛮久最后把它优化了感觉还不错,算是比较聪明的枚举了。

一、题目

输入正整数n,输出所有如abcde/fghij=n的表达式,其中a-j为数字0-9的不重复的排列,这里的除为整除,请统计这样的组合一共有多少个?例如:

输入:62

输出:

79546/01283=62

94736/01528=62

二、暴力初解

初解思路:

直接调的全排列函数,枚举所有的可能然后判断所有的结果,可以就输出

#include <bits/stdc++.h>
using namespace std;
int main(){
int a[10]={0,1,2,3,4,5,6,7,8,9};
int n; cin>>n; int num=0;
do{
int x =a[0]*10000+a[1]*1000+a[2]*100+a[3]*10+a[4];
int y =a[5]*10000+a[6]*1000+a[7]*100+a[8]*10+a[9];
if(x==y*n){
cout<<a[0]<<a[1]<<a[2]<<a[3]<<a[4]<<"/"<<a[5]<<a[6]<<a[7]<<a[8]<<a[9]<<"="<<n<<endl;
}
}while(next_permutation(a,a+10));
return 0;
}

三、优化再解(借鉴bitmap)

bitmap简介:https://www.cnblogs.com/cjsblog/p/11613708.html

再解思路:

欲求abcde / fghij = n的表达式,

从1234枚举到98765即可,设i 为 abcde,那么fghij = n * i

这样问题就转化成了判断 i 和 n * i 一起是否数字为0-9的组合,

然后借鉴bitmap的思路用10位二进制数表示0-9这10个数字,遍历 i 和 n * i 的位数,如果存在0-9就把对应位的1转为0,最后计算完后如果是所有数字都不相同的话就是0;

#include<bits/stdc++.h>
using namespace std; int judge(int a , int b)//判断a,b所有数字是否都不相同,且为0-9
{
int allNum=1023;//所有二进制数为1,一共10个1,也就是1024-1;
string str = to_string(a)+to_string(b);//合在一起运算
if(a<10000 || b<10000) str+='0';//避免缺少了一个0的计算
for(char i : str){
int tmp=1;
for(int j = (i-'0');j>0;j--)//把1移到对应的位
tmp=tmp<<1;
allNum&=(~tmp);//这里allNum-=tmp;也可以
}
return allNum;//如果a,b所有数字都不相同且为0-9那么返回0,否则返回非0;
} int main() {
int n=0;
scanf("%d" , & n);
for(int i = 1234 ; i * n < 98766 ; i ++) {
if(!judge(i, i * n))//如果非0则不能输出所以取反跳过,如果是0那么可以输出所以取反输出可行解
printf("%05d / %05d = %d\n",i*n,i,n);
}
return 0;
}

总结

如果枚举0~9的所有排列,需要10!=3628800次!,可以接受,但是没有必要;聪明的枚举比如输入62只需要359次即可!这算是比较聪明的枚举了吧,如果有问题欢迎评论指出,本人也是算法菜鸡一枚。

聪明的暴力枚举求abcde/fghij=n的更多相关文章

  1. POJ 1815 - Friendship - [拆点最大流求最小点割集][暴力枚举求升序割点] - [Dinic算法模板 - 邻接矩阵型]

    妖怪题目,做到现在:2017/8/19 - 1:41…… 不过想想还是值得的,至少邻接矩阵型的Dinic算法模板get√ 题目链接:http://poj.org/problem?id=1815 Tim ...

  2. nyoj Wythoff Game(暴力枚举)

    Wythoff Game  ms |   KB 描写叙述 近期ZKC同学在学博弈,学到了一个伟大的博弈问题--威佐夫博弈. 相信大家都学过了吧?没学过?没问题.我将要为你讲述一下这个伟大的博弈问题. ...

  3. CodeForces 742B Arpa’s obvious problem and Mehrdad’s terrible solution (暴力枚举)

    题意:求定 n 个数,求有多少对数满足,ai^bi = x. 析:暴力枚举就行,n的复杂度. 代码如下: #pragma comment(linker, "/STACK:1024000000 ...

  4. Codeforces Round #349 (Div. 1) B. World Tour 最短路+暴力枚举

    题目链接: http://www.codeforces.com/contest/666/problem/B 题意: 给你n个城市,m条单向边,求通过最短路径访问四个不同的点能获得的最大距离,答案输出一 ...

  5. POJ-3187 Backward Digit Sums (暴力枚举)

    http://poj.org/problem?id=3187 给定一个个数n和sum,让你求原始序列,如果有多个输出字典序最小的. 暴力枚举题,枚举生成的每一个全排列,符合即退出. dfs版: #in ...

  6. [ACM] ZOJ 3816 Generalized Palindromic Number (DFS,暴力枚举)

    Generalized Palindromic Number Time Limit: 2 Seconds      Memory Limit: 65536 KB A number that will ...

  7. Array and Segments (Easy version) CodeForces - 1108E1 (暴力枚举)

    The only difference between easy and hard versions is a number of elements in the array. You are giv ...

  8. POJ 3080 Blue Jeans (字符串处理暴力枚举)

    Blue Jeans  Time Limit: 1000MS        Memory Limit: 65536K Total Submissions: 21078        Accepted: ...

  9. [CodeForces-1036E] Covered Points 暴力 GCD 求交点

    题意: 在二维平面上给出n条不共线的线段,问这些线段总共覆盖到了多少个整数点 解法: 用GCD可求得一条线段覆盖了多少整数点,然后暴力枚举线段,求交点,对于相应的 整数交点,结果-1即可 #inclu ...

随机推荐

  1. 基于Apache Hudi构建分析型数据湖

    为了有机地发展业务,每个组织都在迅速采用分析. 在分析过程的帮助下,产品团队正在接收来自用户的反馈,并能够以更快的速度交付新功能. 通过分析提供的对用户的更深入了解,营销团队能够调整他们的活动以针对特 ...

  2. 从零开始实现一个MyBatis加解密插件

    作者:vivo 互联网服务器团队- Li Gang 本篇文章介绍使用MyBatis插件来实现数据库字段加解密的过程. 一.需求背景 公司出于安全合规的考虑,需要对明文存储在数据库中的部分字段进行加密, ...

  3. (四连测)滑雪场的高度差题解---二分 + 搜索---DD(XYX)​​​​​​​的博客

    滑雪场的高度差 时间限制: 1 Sec  内存限制: 128 MB 题目描述 滑雪场可以看成M x N的网格状山地(1 <= M,N <= 500),每个网格是一个近似的平面,具有水平高度 ...

  4. setContentView源码分析

    当我们在Activity中调用setContentView,它到底做了什么呢 override fun onCreate(savedInstanceState: Bundle?) { super.on ...

  5. SpringBoot使用libreoffice转换PDF

    1.简介 有时候我们需要在程序中使用到office的转换和预览功能,本文就针对这个需求记录了较为简单的office转换和功能:jodconverter.当然也有aspose和其他开源第三方(kkfil ...

  6. HK32F030MF4P6的Linux GCC工具链和VSCode开发环境

    HK32F030MF4P6简介 航顺的 HK32F030MF4P6, TSSOP20封装, Arm Cortex M0 内核, 内建32MHz时钟, 16K Flash, 2K RAM(实际上可用的有 ...

  7. 使用traefik进行流量复制

    文章转载自:https://mp.weixin.qq.com/s/nMMN7hAJK6SFn1V1YyxvHA Traefik 2.0 还引入了镜像服务,一种可以将流入流量复制并同时将其发送给其他服务 ...

  8. Elasticsearch 架构解析与最佳实践

    文章转载自:https://mp.weixin.qq.com/s/7pWNsUYbM4NyubZO6M3P5g

  9. 1_Maven

    一. 引言 1.1 项目管理问题 项目中jar包资源越来越多, jar包的管理越来越沉重 1.1.1 繁琐 要为每个项目手动导入所需的jar, 需要搜集全部的jar 1.1.2 复杂 项目中的jar如 ...

  10. esp-idf 安装(Windows )

    esp32的开发有两种环境,分别是 Arduino 和 esp32-idf. Arduino 是在 esp32-idf 基础上进行封装的,虽然使用起来比较方便,但是能自由更改的就变少了,适合新手使用. ...