聪明的暴力枚举求abcde/fghij=n
前言
枚举如何聪明的枚举?那就是优化啦!下面梳理之前做过的一个暴力枚举的题,想了蛮久最后把它优化了感觉还不错,算是比较聪明的枚举了。
一、题目
输入正整数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的更多相关文章
- POJ 1815 - Friendship - [拆点最大流求最小点割集][暴力枚举求升序割点] - [Dinic算法模板 - 邻接矩阵型]
妖怪题目,做到现在:2017/8/19 - 1:41…… 不过想想还是值得的,至少邻接矩阵型的Dinic算法模板get√ 题目链接:http://poj.org/problem?id=1815 Tim ...
- nyoj Wythoff Game(暴力枚举)
Wythoff Game ms | KB 描写叙述 近期ZKC同学在学博弈,学到了一个伟大的博弈问题--威佐夫博弈. 相信大家都学过了吧?没学过?没问题.我将要为你讲述一下这个伟大的博弈问题. ...
- CodeForces 742B Arpa’s obvious problem and Mehrdad’s terrible solution (暴力枚举)
题意:求定 n 个数,求有多少对数满足,ai^bi = x. 析:暴力枚举就行,n的复杂度. 代码如下: #pragma comment(linker, "/STACK:1024000000 ...
- Codeforces Round #349 (Div. 1) B. World Tour 最短路+暴力枚举
题目链接: http://www.codeforces.com/contest/666/problem/B 题意: 给你n个城市,m条单向边,求通过最短路径访问四个不同的点能获得的最大距离,答案输出一 ...
- POJ-3187 Backward Digit Sums (暴力枚举)
http://poj.org/problem?id=3187 给定一个个数n和sum,让你求原始序列,如果有多个输出字典序最小的. 暴力枚举题,枚举生成的每一个全排列,符合即退出. dfs版: #in ...
- [ACM] ZOJ 3816 Generalized Palindromic Number (DFS,暴力枚举)
Generalized Palindromic Number Time Limit: 2 Seconds Memory Limit: 65536 KB A number that will ...
- 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 ...
- POJ 3080 Blue Jeans (字符串处理暴力枚举)
Blue Jeans Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 21078 Accepted: ...
- [CodeForces-1036E] Covered Points 暴力 GCD 求交点
题意: 在二维平面上给出n条不共线的线段,问这些线段总共覆盖到了多少个整数点 解法: 用GCD可求得一条线段覆盖了多少整数点,然后暴力枚举线段,求交点,对于相应的 整数交点,结果-1即可 #inclu ...
随机推荐
- 056_末晨曦Vue技术_处理边界情况之X-template
处理边界情况之X-template 点击打开视频讲解更加详细 另一个定义模板的方式是在一个<script>元素中,并为其带上 text/x-template 的类型,然后通过一个 id 将 ...
- BZOJ4212 神牛的养成计划 (字典树,bitset)
题面 Description Hzwer成功培育出神牛细胞,可最终培育出的生物体却让他大失所望- 后来,他从某同校女神 牛处知道,原来他培育的细胞发生了基因突变,原先决定神牛特征的基因序列都被破坏了, ...
- 「题解报告」P7301 【[USACO21JAN] Spaced Out S】
原题传送门 神奇的5分算法:直接输出样例. 20分算法 直接把每个点是否有牛的状态DFS一遍同时判断是否合法,时间复杂度约为\(O(2^{n^2})\)(因为有判断合法的剪枝所以会比这个低).而在前四 ...
- openstack中Neutron组件简解
一.Neutron概述 Neutron 的设计目标是实现"网络即服务(Networking as a Service)".为了达到这一目标,在设计上遵循了基于 SDN 实现网络虚拟 ...
- RTMP播放器开发填坑之道
好多开发者提到,在目前开源播放器如此泛滥的情况下,为什么还需要做自研框架的RTMP播放器,自研和开源播放器,到底好在哪些方面?以下大概聊聊我们的一点经验,感兴趣的,可以关注 github: 1. 低延 ...
- Asible_hosts
定义主机清单 vim /etc/ansible/hosts 示例 # 中括号分组,后面的http_port是自己定义的参数可以在playbook中使用 [wbservs] 192.168.1.101 ...
- torch.meshgrid
1:https://blog.csdn.net/weixin_39504171/article/details/106356977 2: https://pytorch.org/docs/stable ...
- 利用ldt_struct 与 modify_ldt 系统调用实现任意地址读写
利用ldt_struct 与 modify_ldt 系统调用实现任意地址读写 ldt_struct与modify_ldt系统调用的介绍 ldt_struct ldt是局部段描述符表,里面存放的是进程的 ...
- 将java的项目jar包打成镜像
一.镜像.容器相关知识的概述 Docker 镜像 docker镜像是一个特殊的文件系统,除了提供容器运行时所需的程序.库.资源.配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷.环境变量 ...
- Elastic:为Elastic Docker部署设置安全
文章转载自:https://elasticstack.blog.csdn.net/article/details/105710973 创建docker-compose.yml 在之前的教程中,那里使用 ...