问题描述

100 可以表示为带分数的形式:100 = 3 + 69258 / 714。

还可以表示为:100 = 82 + 3546 / 197。

注意特征:带分数中,数字1~9分别出现且只出现一次(不包含0)。

类似这样的带分数,100 有 11 种表示法。

输入格式

从标准输入读入一个正整数N (N<1000*1000)

输出格式

程序输出该数字用数码1~9不重复不遗漏地组成带分数表示的全部种数。

注意:不要求输出每个表示,只统计有多少表示法!

样例输入1
100
样例输出1
11
样例输入2
105
样例输出2
6
 
首先是暴力,TLE ,33分,讲道理我还想不到好嘛。
 // 纯纯的暴力 挂了。
#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的更多相关文章

  1. 蓝桥杯练习系统历届试题 剪格子 dfs

    问题描述 如下图所示,3 x 3 的格子中填写了一些整数. +--*--+--+|10* 1|52|+--****--+|20|30* 1|*******--+| 1| 2| 3|+--+--+--+ ...

  2. 蓝桥杯练习系统—基础练习 2n皇后问题

    问题描述 给定一个n*n的棋盘,棋盘中有一些位置不能放皇后.现在要向棋盘中放入n个黑皇后和n个白皇后, 使任意的两个黑皇后都不在同一行.同一列或同一条对角线上,任意的两个白皇后都不在同一行. 同一列或 ...

  3. [18/12/3]蓝桥杯 练习系统 入门级别 Fibonacci数列求模问题 题解思路

    前言略. 看到这个题目本来应该很高兴的,因为什么,因为太TM的基础了啊! 可是当你用常规方法尝试提交OJ时你会发现..hhh...运行超时..(开心地摇起了呆毛 //Fibonacci数列递归一般问题 ...

  4. 蓝桥杯之剪格子(经典dfs)

    如下图所示,3 x 3 的格子中填写了一些整数. +--*--+--+ |10* 1|52| +--****--+ |20|30* 1| *******--+ | 1| 2| 3| +--+--+-- ...

  5. 蓝桥杯 地宫寻宝 带缓存的DFS

      历届试题 地宫取宝   时间限制:1.0s   内存限制:256.0MB      问题描写叙述 X 国王有一个地宫宝库. 是 n x m 个格子的矩阵. 每一个格子放一件宝贝. 每一个宝贝贴着价 ...

  6. Java实现 蓝桥杯 历届试题 带分数

    问题描述 100 可以表示为带分数的形式:100 = 3 + 69258 / 714. 还可以表示为:100 = 82 + 3546 / 197. 注意特征:带分数中,数字1~9分别出现且只出现一次( ...

  7. 算法笔记_197:历届试题 带分数(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 100 可以表示为带分数的形式:100 = 3 + 69258 / 714. 还可以表示为:100 = 82 + 3546 / 197. ...

  8. 第六届蓝桥杯B组C++试题

    1.  奖券数目 有些人很迷信数字,比如带"4"的数字,认为和"死"谐音,就觉得不吉利. 虽然这些说法纯属无稽之谈,但有时还要迎合大众的需求.某抽奖活动的奖券号 ...

  9. 36-2018 蓝桥杯Java B组试题及答案

    1:第几天2000年的1月1日,是那一年的第1天.那么,2000年的5月4日,是那一年的第几天? 注意:需要提交的是一个整数,不要填写任何多余内容. 用excel算,答案125. 2.标题:方格计数 ...

随机推荐

  1. Day04 dom详解及js事件

    day04 dom详解 DOM的基础 Document对象 Element对象 Node对象 innerHTML 事件处理 表单验证   上次课内容回顾: JS中ECMAScript用法: JS定义变 ...

  2. tobii SDK开发学习

    最近实验室用到tobii的眼动仪,从网上了解了下,tobii是瑞典的眼跟踪技术开发商,今年似乎有上市计划,不知道市值多少 买了仪器后试用了下,还算可以,将来配合人体设备开发,不过配套软件还需要花钱买. ...

  3. [css]单/多行居中&字体设置

    行高和字号 行高 CSS中,所有的行,都有行高.盒模型的padding,绝对不是直接作用在文字上的,而是作用在"行"上的. line-height: 40px; 文字,是在自己的行 ...

  4. 嵌入式linux内核制作、根文件系统制作

    嵌入式系统构成: 主要由bootloader.kernel.以及根文件系统三部分组成. 内核制作步骤: 制作嵌入式平台使用的linux内核制作方法与pc平台上的linux内核基本一致 1.清除原有配置 ...

  5. Elasticsearch查询规则(一)match和term

    es种有两种查询模式,一种是像传递URL参数一样去传递查询语句,被称为简单搜索或查询字符串(query string)搜索,比如 GET /megacorp/employee/_search //查询 ...

  6. PAT 1128 N Queens Puzzle[对角线判断]

    1128 N Queens Puzzle(20 分) The "eight queens puzzle" is the problem of placing eight chess ...

  7. 91. Decode Ways(动态规划 26个字母解码个数)

    A message containing letters from A-Z is being encoded to numbers using the following mapping: 'A' - ...

  8. supervisor安装及其配置

    一.supervisor概述 supervisor是一个c/s系统,被用来在类Unix系统中监控进程状态.supervisor使用python开发. 服务端进程为supervisord,主要负责启动自 ...

  9. Eclipse配置tomcat8.5.7报错:The Apache Tomcat installation at this directory is version 8.5.27. A Tomcat 8.0 installation is...

    Eclipse配置tomcat8.5.7报错:The Apache Tomcat installation at this directory is version 8.5.27. A Tomcat ...

  10. # 20145106 《Java程序设计》第3周学习总结

    教材学习内容总结 在本周的学习中,我看到了这样一句话:"使用java撰写程序几乎都是在使用对象(object),要产生对象必须先定义类(class),类是对象的设计图,对象是类的实例(ins ...