[蓝桥杯]带分数-dfs
题目描述
100 可以表示为带分数的形式:100 = 3 + 69258 / 714。
还可以表示为:100 = 82 + 3546 / 197。
注意特征:带分数中,数字1~9分别出现且只出现一次(不包含0)。
类似这样的带分数,100 有 11 种表示法。
输入
从标准输入读入一个正整数N (N<1000*1000)
输出
程序输出该数字用数码1~9不重复不遗漏地组成带分数表示的全部种数。
样例输入
100
样例输出
11
代码如下:
#include <iostream>
using namespace std;
#include <cstring>
int n,ans = 0;
const int N = 11;
bool use[N],use2[N];bool check(int suma,int sumc)
{long long b = (long long )sumc * n - suma*sumc;if (!b){return false;}memcpy(use2,use,sizeof(use));//memcpy这一步用的不错!!!while(b){if (use2[b%10] || !(b%10))//这一步很关键!!!{return false;}use2[b%10] = true;b /= 10;}for (int i =1;i<=9;i++){if (!use2[i]){return false;}}return true;
}void dfs_c(int u,int suma,int sumc)
{if (u > 9){return ;}if (check(suma,sumc)){ans++;return ;}for (int i = 1;i<=9;i++){if (!use[i]){use[i] = true;dfs_c(u+1,suma,sumc*10+i);use[i] = false;}}
}void dfs_a(int u,int suma)
{if(suma>=n){return ;}if (u){dfs_c(u,suma,0);}for (int i = 1;i<=9;i++){if (!use[i]){use[i] = true;dfs_a(u+1,suma*10+i);use[i] = false;}}
}int main()
{cin>>n;dfs_a(0,0);cout<<ans<<endl;return 0;
}
#include <iostream>
#include <cstring>
using namespace std;
typedef long long LL;
const int N = 12;
bool vis[N];
int n;
int ans;
bool check(int suma,int sumc)
{bool st[N];LL sum_b = (LL)sumc*n-(LL)suma*sumc;memcpy(st,vis,sizeof(vis));while(sum_b){if (st[sum_b%10] || sum_b%10==0) return false;//这一步很关键!!!st[sum_b%10] = true;sum_b = sum_b/10;}for (int i = 1;i<=9;i++){if (!st[i]) return false;}return true;
}void dfs_c(int u,int suma,int sumc)
{if (u > 9) return ;if (check(suma,sumc) && sumc!=0){ans++;return ;}for (int i = 1;i<=9;i++){if (!vis[i]){vis[i] =true;dfs_c(u+1,suma,sumc*10+i);vis[i] = false;}}
}void dfs_a(int u,int suma)
{dfs_c(u,suma,0);for (int i = 1;i<=9;i++){if (!vis[i]){vis[i] = true;dfs_a(u+1,suma*10+i);vis[i] = false;}}
}int main()
{cin>>n;dfs_a(0,0);cout<<ans<<endl;return 0;
}
[蓝桥杯]带分数-dfs相关推荐
- 蓝桥杯Java——DFS深度优先搜索算法
目录 基本概念 算法思想 模板 例子 基本概念 深度优先搜索算法(Depth First Search,简称DFS):一种用于遍历或搜索树或图的算法. 沿着树的深度遍历树的节点,尽可能深的搜索树的分支 ...
- 蓝桥杯-带分数(C语言)
9. 标题:带分数 可以表示为带分数的形式:100 = 3 + 69258 / 714 还可以表示为:100 = 82 + 3546 / 197 注意特征:带分数中,数字1~9分别出现且只出现一次(不 ...
- 受伤的皇后(蓝桥杯)(DFS)
Question: 题目描述 有一个 n×n 的国际象棋棋盘(n行n列的方格图),请在棋盘中摆放 n 个受伤的国际象棋皇后,要求: 任何两个皇后不在同一行. 任何两个皇后不在同一列. 如果两个皇后在同 ...
- [蓝桥杯2019初赛]迷宫-DFS、BFS两种方法
迷宫问题的最短路,加最小字典序 迷宫文件maze.txt传送门 作者写的2019年B组蓝桥杯解集 . . . DFS的版本 #include<iostream> #include<c ...
- 蓝桥杯2017国赛 瓷砖样式 dfs+map
标题:磁砖样式小明家的一面装饰墙原来是 3*10 的小方格.现在手头有一批刚好能盖住2个小方格的长方形瓷砖.瓷砖只有两种颜色:黄色和橙色.小明想知道,对于这么简陋的原料,可以贴出多少种不同的花样来.小 ...
- 蓝桥杯c语言试题幸运数,蓝桥杯 历届试题 幸运数 dfs
时间限制:1.0s 内存限制:256.0MB 问题描述 幸运数是波兰数学家乌拉姆命名的.它采用与生成素数类似的"筛法"生成 . 首先从1开始写出自然数1,2,3,4,5,6,. ...
- 【解题报告+通法】_九宫幻方 蓝桥杯 2017年C组第八题(dfs解法)
题目描述 小明最近在教邻居家的小朋友小学奥数,而最近正好讲述到了三阶幻方这个部分,三阶幻方指的是将1~9不重复的填入一个3*3的矩阵当中,使得每一行.每一列和每一条对角线的和都是相同的. 三阶幻方又被 ...
- 16行代码AC_蓝桥杯 2017年C组第三题 算式900(暴力解法+DFS解法)
励志用更少的代码做更高效的表达 题目描述: 小明的作业本上有道思考题: 看下面的算式: (□□□□-□□□□)*□□=900 其中的小方块代表0~9的数字,这10个方块刚好包含了0~9中的所有数字. ...
- 蓝桥杯2015决赛-方格填数-枚举 or dfs
题目描述 在2行5列的格子中填入1到10的数字. 要求:相邻的格子中的数,右边的大于左边的,下边的大于上边的. 如下图所示的2种,就是合格的填法. 请你计算一共有多少种可能的方案. 输出 请输出该整数 ...
最新文章
- VMware host-only模式上网设置
- C语言输入一个任意数求各位数的和
- Python学习笔记(五) Python高级特性
- 解决 web.xml is missing and failOnMissingWebXml is set to true 报错
- plsql 快捷键设置
- 程序员必须知道的15件事(转)
- [Unity][FlowCanvas] 被重复执行的节点,只要其中一次执行出现报错,该报错就会在脚本中一直显示
- linux nginx 配置端口访问,Linux入门教程:ubuntu 16.04配置nginx服务器实现一个IP一个端口多个站点,ubuntunginxNginx 使用异步...
- 小刘同学的CMOS模拟集成电路学习小记(不停更新)
- PPT精品教程隐私政策
- 如何区分网线是几类的_网线如何区分五类线、超五类线和六类线?
- 入坑之路第七天(防御策略报表工具)
- python制作日历_用Python制作一份你专属的爱豆日历
- Spring 核心 之 AOP
- 电能质量:电压暂升暂降中断
- 万字长文:功能安全量产落地的三座大山
- Windows Terminal配置
- element输入框限制数字输入
- 激光测距误差对激光脚点定位的影响
- CNN卷积神经网络简单示例(PyTorch)
热门文章
- Android studio编译出现Failed to finalize session : INSTALL_FAILED_INVALID_APK
- Android之基于xmpp openfire smack开发之Android消息推送技术原理分析和实践[4]
- 云计算及应用课程知识整理
- 如何用c语言验证一个定理,验证动量定理方法一
- 全地球的水也没办法将这个“特殊”的瓶子装满!
- 美少女什么味??竟然还有美少女风味泡面......
- 说普通话时舌头卷不起来是一种什么体验?| 今日最佳
- 拼多多出现大Bug:100无门槛券随便领,一晚损失200亿
- 听说你在学习算法?清华教授为你准备了一份独家秘籍!
- 提升代码可读性的 10 个技巧