PREV-3_蓝桥杯_带分数
100 可以表示为带分数的形式:100 = 3 + 69258 / 714。
还可以表示为:100 = 82 + 3546 / 197。
注意特征:带分数中,数字1~9分别出现且只出现一次(不包含0)。
类似这样的带分数,100 有 11 种表示法。
从标准输入读入一个正整数N (N<1000*1000)
程序输出该数字用数码1~9不重复不遗漏地组成带分数表示的全部种数。
注意:不要求输出每个表示,只统计有多少表示法!
- a的默认比例为1,依次递增(a <= n的长度)
- 将区间总长度(LEN=9)减去a,并取得中值,从而得到b,c的值(b >= c)
- 每次dfs后,b ++,c --,再次dfs(当b-c > n的长度时,明显不符条件)
源码如下:
#include <stdio.h>
#define LEN 9 int n;
int a,b,c;
int sum = , len = ;
int ans[LEN+] = {};
int num[LEN+] = {,,,,,,,,,,};
int f[LEN+] = {}; void dfs(int x)
{
int i , j;
int x1,x2,x3;
if (x > )
{
x = x1 = x2 = x3 = ;
/*1.确定第一个值x1*/
for (i = , j = ; i < a ; i ++)
{
x1 += ans[++x]*j;
j *= ;
} /*2.确定分数的分子x2*/
for (i = , j = ; i < b ; i ++)
{
x2 += ans[++x]*j;
j *= ;
} /*3.确定分数的分母x3*/
for (i = , j = ; i < c ; i ++)
{
x3 += ans[++x]*j;
j *= ;
} if (x2%x3 == && (x1 + x2/x3) == n)
{
sum ++;
//printf("%d+%d/%d\n",x1,x2,x3);
}
return ;
} for (i = ; i <= ; i ++)
{
if (!f[i])
{
ans[x] = num[i];
f[i] = ;
dfs(x+);
f[i] = ;
}
} return ;
} int main(void)
{
int i;
scanf("%d",&n);
i = n;
while(i)
{
i = i/;
len ++; /*获取n的长度*/
} for (a = ; a <= len ; a ++)
{
i = LEN-a;
b = i - i/;
c = i - b;
if (b < c)/*b必定为较大区间*/
{
b = b^c;
c = b^c;
b = b^c;
} /*更改b和c的比例*/
while (c)
{
dfs();
b ++;
c --;
}
}
printf("%d",sum);
return ;
}
PREV-3_蓝桥杯_带分数的更多相关文章
- ALGO-22_蓝桥杯_算法训练_数的划分(DP)
问题描述 将整数n分成k份,且每份不能为空,任意两份不能相同(不考虑顺序). 例如:n=,k=,下面三种分法被认为是相同的. ,,; ,,; ,,; 问有多少种不同的分法. 输入格式 n,k 输出格式 ...
- 蓝桥杯_算法训练_ALGO10_集合运算
这个题实际上思路是比较简单的,但是需要注意细节问题. 思路:读入数组之后进行排序,然后再求交.并.补集. 首先排序:(使用的是冒泡排序) #include<iostream> using ...
- 蓝桥杯_算法训练_Torry的困惑(基本型)
这个题目就是求质数的乘积,在加一个模,思路比较简单,直接上代码: #include<iostream> using namespace std; bool isPrime(int a) { ...
- 蓝桥杯_算法训练_区间k大数查询
问题描述 给定一个序列,每次询问序列中第l个数到第r个数中第K大的数是哪个. 输入格式 第一行包含一个数n,表示序列长度. 第二行包含n个正整数,表示给定的序列. 第三个包含一个正整数m,表示询问个数 ...
- ALGO-43_蓝桥杯_算法训练_A+B Problem
问题描述 输入A,B. 输出A+B. 输入格式 输入包含两个整数A,B,用一个空格分隔. 输出格式 输出一个整数,表示A+B的值. 样例输入 样例输出 数据规模和约定 -,,,<=A,B< ...
- ALGO-39_蓝桥杯_算法训练_数组排序去重
问题描述 输入10个整数组成的序列,要求对其进行升序排序,并去掉重复元素. 输入格式 10个整数. 输出格式 多行输出,每行一个元素. 样例输入 样例输出 解题思路: 若输入的数字存在数组中,剔除,否 ...
- ALGO-115_蓝桥杯_算法训练_和为T(枚举)
问题描述 从一个大小为n的整数集中选取一些元素,使得它们的和等于给定的值T.每个元素限选一次,不能一个都不选. 输入格式 第一行一个正整数n,表示整数集内元素的个数. 第二行n个整数,用空格隔开. 第 ...
- ALGO-117_蓝桥杯_算法训练_友好数
问题描述 有两个整数,如果每个整数的约数和(除了它本身以外)等于对方,我们就称这对数是友好的.例如: 9的约数和有:+= 4的约数和有:+= 所以9和4不是友好的. 220的约数和有: = 284的约 ...
- ALGO-118_蓝桥杯_算法训练_连续正整数的和
问题描述 78这个数可以表示为连续正整数的和,++,+++,++. 输入一个正整数 n(<=) 输出 m 行(n有m种表示法),每行是两个正整数a,b,表示a+(a+)+...+b=n. 对于多 ...
随机推荐
- 田螺便利店—ipconfig命令不是内部命令或外部命令怎么解决?
查询网卡ID在运行后输入ipconfig/all点回车后提示ipconfig不是内部或外部命令,也不是可运行的程序或批处理文件? 首先确认你的输入是无误的,确保输入无误,仍提示 ipconfig 不是 ...
- HTML5的一些知识点
1.新增很多api,比如获取用户的地理位置的window.navigator.geoloaction,history,audio,video,canvas 2.websocket;websocket是 ...
- 内存池技术(UVa 122 Tree on the level)
内存池技术就是创建一个内存池,内存池中保存着可以使用的内存,可以使用数组的形式实现,然后创建一个空闲列表,开始时将内存池中所有内存放入空闲列表中,表示空闲列表中所有内存都可以使用,当不需要某一内存时, ...
- canvas 使用 isPointInPath() 判断鼠标位置是否在绘制的元素上
canvas 里绘制的图形不是一个实体 DOM,所以要给每个绘制的图形添加事件操作比给 DOM 添加事件要复杂很多. 所以,我们需要使用一个 canvas 的 isPointInPath(x, y) ...
- mysqldump命令之single-transaction
=========================================================在mysqldump中指定single-transaction时,会使用可重复读(RE ...
- timescaledb 集成 madlib
github 上有人提出了一个问题(2017 很早了),然后搜索timescaledb 的docs 文档,发现有 一片介绍的文章,所以尝试运行下 备注: 环境使用虚拟机安装(没有使用docker ma ...
- node ->rman to RAC (迁移)
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/lmocm/article/details/34435699 *.audit_file_dest='/ ...
- C# to IL 3 Selection and Repetition(选择和重复)
In IL, a label is a name followed by the colon sign i.e ":". It gives us the ability to ju ...
- 自动化部署--shell脚本--1
传统部署方式1.纯手工scp2.纯手工登录git pull .svn update3.纯手工xftp往上拉4.开发给打一个压缩包,rz上去.解压 传统部署缺点:1.全程运维参与,占用大量时间2.上线速 ...
- [转]HashMap的实现原理
1. HashMap概述: HashMap是基于哈希表的Map接口的非同步实现.此实现提供所有可选的映射操作,并允许使用null值和null键.此类不保证映射的顺序,特别是它不保证该顺序恒久不变 ...