蓝桥杯练习系统历届试题 带分数 dfs
100 可以表示为带分数的形式:100 = 3 + 69258 / 714。
还可以表示为:100 = 82 + 3546 / 197。
注意特征:带分数中,数字1~9分别出现且只出现一次(不包含0)。
类似这样的带分数,100 有 11 种表示法。
从标准输入读入一个正整数N (N<1000*1000)
程序输出该数字用数码1~9不重复不遗漏地组成带分数表示的全部种数。
注意:不要求输出每个表示,只统计有多少表示法!
// 纯纯的暴力 挂了。
#include <stdio.h>
#include <string.h>
#include <iostream>
using namespace std; int vis[], visall[]; bool check(int num) {
while(num) {
int temp = num % ;
if (vis[temp]) return false;
if (temp == ) return false;
vis[temp]++;
num /= ;
}
return true;
} bool checkAll() {
for (int i=; i<; ++i) {
if (vis[i] != ) return false;
}
return true;
} void copyNum(int a[], int b[]) {
for (int i=; i<; ++i) {
a[i] = b[i];
}
} int main() {
int n;
while(cin >> n) {
memset(vis, , sizeof(vis));
memset(visall, , sizeof(visall));
int ans = ; for (int l=; l<n; ++l) {
memset(vis, , sizeof(vis));
if (!check(l)) continue;
copyNum(visall, vis); for (int down=; down<; ++down) {
int up = (n-l) * down;
if (down > up) continue;
if (up % down) continue;
copyNum(vis, visall);
if (!check(down) || !check(up)) {
continue;
}
if (checkAll()) {
//cout << l << " " << down << " " << up << endl;
ans++;
}
}
} cout << ans << endl;
}
return ;
}
然后是优化。依然感觉dfs好神奇的说。
/*
刚才暴力的优化吧。
先遍历左边的数字,然后dfs搜分母对应的长度 和 数字。
*/ #include <stdio.h>
#include <string.h>
#include <iostream>
using namespace std; int lens, v, ans;
int vis[], visall[]; bool check(int num) {
int k = ;
while(num) {
int temp = num % ;
if (vis[temp]) return false;
vis[temp]++;
k++;
num /= ;
}
lens = -k; // 剩余可用数字的个数
return true;
} void copyVis() {
for (int i=; i<; ++i) {
visall[i] = vis[i];
}
} int judge(int up) { // fenmu
int k = ;
copyVis();
while(up) {
int temp = up % ;
if (visall[temp]) return -;
visall[temp] = ;
k++;
up /= ;
}
return k;
} void dfs(int len, int val) { // len fenzi
if (len > lens/) return;
if (judge(v*val) == lens-len) ans++;
for (int i=; i<; ++i) {
if (vis[i]) continue;
vis[i] = ;
dfs(len+, val*+i);
vis[i] = ;
}
} int main() {
int n;
while(cin >> n) {
ans = ;
for (int l=; l<n; ++l) {
memset(vis, , sizeof(vis));
vis[] = ;
if (!check(l)) continue;
v = n - l;
dfs(, ); // len fenmu
}
cout << ans << endl;
}
return ;
}
然后还有一种思路就是,对九个数字实现全排列,然后从八个空里找两个放+ 和 /。讲道理,这样的话,时间复杂度是10^6*8*7 不知道能不能过.....
蓝桥杯练习系统历届试题 带分数 dfs的更多相关文章
- 蓝桥杯练习系统历届试题 剪格子 dfs
问题描述 如下图所示,3 x 3 的格子中填写了一些整数. +--*--+--+|10* 1|52|+--****--+|20|30* 1|*******--+| 1| 2| 3|+--+--+--+ ...
- 蓝桥杯练习系统—基础练习 2n皇后问题
问题描述 给定一个n*n的棋盘,棋盘中有一些位置不能放皇后.现在要向棋盘中放入n个黑皇后和n个白皇后, 使任意的两个黑皇后都不在同一行.同一列或同一条对角线上,任意的两个白皇后都不在同一行. 同一列或 ...
- [18/12/3]蓝桥杯 练习系统 入门级别 Fibonacci数列求模问题 题解思路
前言略. 看到这个题目本来应该很高兴的,因为什么,因为太TM的基础了啊! 可是当你用常规方法尝试提交OJ时你会发现..hhh...运行超时..(开心地摇起了呆毛 //Fibonacci数列递归一般问题 ...
- 蓝桥杯之剪格子(经典dfs)
如下图所示,3 x 3 的格子中填写了一些整数. +--*--+--+ |10* 1|52| +--****--+ |20|30* 1| *******--+ | 1| 2| 3| +--+--+-- ...
- 蓝桥杯 地宫寻宝 带缓存的DFS
历届试题 地宫取宝 时间限制:1.0s 内存限制:256.0MB 问题描写叙述 X 国王有一个地宫宝库. 是 n x m 个格子的矩阵. 每一个格子放一件宝贝. 每一个宝贝贴着价 ...
- Java实现 蓝桥杯 历届试题 带分数
问题描述 100 可以表示为带分数的形式:100 = 3 + 69258 / 714. 还可以表示为:100 = 82 + 3546 / 197. 注意特征:带分数中,数字1~9分别出现且只出现一次( ...
- 算法笔记_197:历届试题 带分数(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 100 可以表示为带分数的形式:100 = 3 + 69258 / 714. 还可以表示为:100 = 82 + 3546 / 197. ...
- 第六届蓝桥杯B组C++试题
1. 奖券数目 有些人很迷信数字,比如带"4"的数字,认为和"死"谐音,就觉得不吉利. 虽然这些说法纯属无稽之谈,但有时还要迎合大众的需求.某抽奖活动的奖券号 ...
- 36-2018 蓝桥杯Java B组试题及答案
1:第几天2000年的1月1日,是那一年的第1天.那么,2000年的5月4日,是那一年的第几天? 注意:需要提交的是一个整数,不要填写任何多余内容. 用excel算,答案125. 2.标题:方格计数 ...
随机推荐
- Air Raid---hdu1151(最小路径覆盖)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1151 最小路径覆盖 == 顶点数 - 最大匹配. #include<stdio.h> #i ...
- CentOS 6.4下Squid代理服务器的安装与配置(转)
add by zhj: 其实我们主要还是关注它在服务器端使用时,充当反向代理和静态数据缓存.至于普通代理和透明代理,其实相当于客户端做的事,和服务端没有什么关系.另外,Squid的缓存主要是缓存在硬盘 ...
- Linux下编译安装PHP扩展memcached
[安装 libevent] $ tar zxvf libevent-2.0.20-stable.tar.gz $ cd libevent-2.0.20-stable/$ ./configure --p ...
- 002-字段不为null
1.尽量不要在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,强烈建议where涉及的列,不要留空,创建表时赋予初始值. 比如 select id from ...
- spark环境安装
源码包下载: http://archive.apache.org/dist/spark/spark-2.1.1/v 集群环境: master 192.168.1.99 slave1 192.168.1 ...
- jQuery源码分析--Event模块(1)
jQuery的Event模块提供了强大的功能:事件代理,自定义事件,自定义数据等.今天记录一下它实现的原理. 我们都知道,在js的原生事件中,有事件对象和回调函数这两样东西.但是事件对象是只读的,所以 ...
- C++ string和C风格字符串
https://msdn.microsoft.com/en-us/library/syxtdd4f.aspx#basic_string__replace If you need to convert ...
- PostgreSQL 9.3:在windows(包括win7)下的安装与正确配置
首先,以下是常用命令: ③ initdb 初始化 数据库. ④ pg_ctl start 启动数据库 ⑤ pg_ctl stop 停止数据库 ⑥ post_svc -install 建立windows ...
- 20155201 2016-2017-2 《Java程序设计》第三周学习总结
20155201 2016-2017-2 <Java程序设计>第三周学习总结 教材学习内容总结 - 第四章要点: 4.1类与对象 类定义时使用class关键词,基本模式为 class na ...
- ngular6开发不完全笔记(二)-- 管道
自定义管道 管道(过滤器)为过滤数据显示下列list数据 pip.ts 文件 import { Pipe, PipeTransform } from '@angular/core'; import { ...