聪明的暴力枚举求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 ...
随机推荐
- 一文搞懂 Python 的模块和包,在实战中的最佳实践
最近公司有个项目,我需要写个小爬虫,将爬取到的数据进行统计分析.首先确定用 Python 写,其次不想用 Scrapy,因为要爬取的数据量和频率都不高,没必要上爬虫框架.于是,就自己搭了一个项目,通过 ...
- DES|3DES|AES|RSA|DH | CA | SSL(HTTPS)
1.对称密钥算法: 加解密速度块,算法使安全的,已知算法无法推出密钥.但是密钥的分发困难. DES:对称密钥算法,是一种块加密算法,只有一个密钥.加解密都是用一个密钥. 3DES:与DES一样,可以认 ...
- Python条件语句的用法
python条件语句使用 if 表达式,难度不高,需要注意的是嵌套用法,以及如何设置对应的条件. if 条件判断语句 python 语句是按固定顺序执行的,先执行前面的语句,再执行后面的语句.如果你像 ...
- 字节跳动端智能工程链路 Pitaya 的架构设计
Client AI 是字节跳动产研架构下属的端智能团队,负责端智能 AI 框架和平台的建设,也负责模型和算法的研发,为字节跳动开拓端上智能新场景.本文介绍的 Pitaya 是由字节跳动的 Client ...
- 第二十五篇:vue-cli
好家伙,感觉好像摸到一点核心了, 什么是vue-cli? 1.vue-cli官方提供的一个脚手架,用于快速生成一个vue模板, 预先定义好目录结构以及基础代码 2.什么是脚手架? (1)做电梯井抹灰. ...
- HDFS 高可用分布式环境搭建
HDFS 高可用分布式环境搭建 作者:Grey 原文地址: 博客园:HDFS 高可用分布式环境搭建 CSDN:HDFS 高可用分布式环境搭建 首先,一定要先完成分布式环境搭建 并验证成功 然后在 no ...
- Gitea v1.17.0 正式发布 | 集成软件包管理器、容器镜像仓库
我们自豪地宣布 Gitea v1.17.0 发布了.本次发布带来了诸多新特性和累积的更新,我们强烈建议用户在更新到最新版本之前仔细阅读发行注记. 在 1.17.0 版本的开发中我们一共合并了 645 ...
- winform, 实现窗口程序像QQ一样靠近桌面边缘自动隐藏窗口
实现原理: 步骤如下: 1.判断窗体程序是否靠近桌面边缘: 2.获取桌面屏幕大小与窗体程序大小: 3.把窗体程序显示在桌面以外隐藏起来,预留部分窗体方便用户拉出程序: 4.判断鼠标是否在窗体程序上,在 ...
- 带你了解CANN的目标检测与识别一站式方案
摘要: 了解通用目标检测与识别一站式方案的功能与特性,还有实现流程,以及可定制点. 本文分享自华为云社区<玩转CANN目标检测与识别一站式方案>,作者: Tianyi_Li. 背景介绍 目 ...
- Django 连接数据库 MySQL
一.Django 连接 MySQL 修改 settings.py 文件 # 默认用的是sqlite3 # Database # https://docs.djangoproject.com/en/4. ...