问题描述

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
 
 记:
题目的类型是:n = a + b/c,求满足的个数
一开始以为就是简单的两个不同比例的"数字+分数"模式,结果在测试其他数据时错误,
故将注意力放在a,b,c的比例分配(隐藏条件b >= c)
然而并没有发现规律...
上网查阅,有一篇博客讲到了全排序(http://blog.csdn.net/jopus/article/details/18998403)
还没开始精细阅读源码,被其中的分区的概念刺激
于是有了思路:
  1. a的默认比例为1,依次递增(a <= n的长度)
  2. 将区间总长度(LEN=9)减去a,并取得中值,从而得到b,c的值(b >= c)
  3. 每次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_蓝桥杯_带分数的更多相关文章

  1. ALGO-22_蓝桥杯_算法训练_数的划分(DP)

    问题描述 将整数n分成k份,且每份不能为空,任意两份不能相同(不考虑顺序). 例如:n=,k=,下面三种分法被认为是相同的. ,,; ,,; ,,; 问有多少种不同的分法. 输入格式 n,k 输出格式 ...

  2. 蓝桥杯_算法训练_ALGO10_集合运算

    这个题实际上思路是比较简单的,但是需要注意细节问题. 思路:读入数组之后进行排序,然后再求交.并.补集. 首先排序:(使用的是冒泡排序) #include<iostream> using ...

  3. 蓝桥杯_算法训练_Torry的困惑(基本型)

    这个题目就是求质数的乘积,在加一个模,思路比较简单,直接上代码: #include<iostream> using namespace std; bool isPrime(int a) { ...

  4. 蓝桥杯_算法训练_区间k大数查询

    问题描述 给定一个序列,每次询问序列中第l个数到第r个数中第K大的数是哪个. 输入格式 第一行包含一个数n,表示序列长度. 第二行包含n个正整数,表示给定的序列. 第三个包含一个正整数m,表示询问个数 ...

  5. ALGO-43_蓝桥杯_算法训练_A+B Problem

    问题描述 输入A,B. 输出A+B. 输入格式 输入包含两个整数A,B,用一个空格分隔. 输出格式 输出一个整数,表示A+B的值. 样例输入 样例输出 数据规模和约定 -,,,<=A,B< ...

  6. ALGO-39_蓝桥杯_算法训练_数组排序去重

    问题描述 输入10个整数组成的序列,要求对其进行升序排序,并去掉重复元素. 输入格式 10个整数. 输出格式 多行输出,每行一个元素. 样例输入 样例输出 解题思路: 若输入的数字存在数组中,剔除,否 ...

  7. ALGO-115_蓝桥杯_算法训练_和为T(枚举)

    问题描述 从一个大小为n的整数集中选取一些元素,使得它们的和等于给定的值T.每个元素限选一次,不能一个都不选. 输入格式 第一行一个正整数n,表示整数集内元素的个数. 第二行n个整数,用空格隔开. 第 ...

  8. ALGO-117_蓝桥杯_算法训练_友好数

    问题描述 有两个整数,如果每个整数的约数和(除了它本身以外)等于对方,我们就称这对数是友好的.例如: 9的约数和有:+= 4的约数和有:+= 所以9和4不是友好的. 220的约数和有: = 284的约 ...

  9. ALGO-118_蓝桥杯_算法训练_连续正整数的和

    问题描述 78这个数可以表示为连续正整数的和,++,+++,++. 输入一个正整数 n(<=) 输出 m 行(n有m种表示法),每行是两个正整数a,b,表示a+(a+)+...+b=n. 对于多 ...

随机推荐

  1. MySQL中的运算符和时间运算

    一.MySQL中运算符的分类 算术运算符,比较运算符,逻辑运算符,按位运算符 二.算数运算符 符号                            作用 + 加法   - 减法   * 乘法   ...

  2. 2018.10.25 CCSP马拉松摸铜归来

    24号体测跑50+1000米. 50米抢跑被罚重跑???然后老年人就只能吊着一口仙气跑第二次50米.然后跑1000米,然后再到宿舍收拾行李赶往地铁站,然后再冲到火车站...(卒) 宾馆,三人挤入二人房 ...

  3. Estimating Linguistic Complexity for Science Texts--paper

    http://aclweb.org/anthology/W18-0505 https://sites.google.com/site/nadeemf0755/research/linguistic-c ...

  4. Arrays ---------------copyOf赋值

  5. 关于”铁大吃什么“的nabcd的分析

    Need: 为那些饥肠辘辘而又囊中羞涩的铁大同学提供最新最全的美食信息. Approach: 跑遍铁大所有角落,收集所有关于美食的信息,主要是价格口味方面,口味方面会通过学生的打分来数量化,建立一个库 ...

  6. i = i ++;的分解

    步骤分解: package wrong; public class ShortTest { public static void main(String args[]) { /* * i = i ++ ...

  7. 如何解决VMware 12 安装Ubuntu 16.04时无网络连接问题

    刚安装玩Ubuntu,打开后上网没有网络连接 ,点击右上角的数据连接,显示已经启动联网,但是用火狐还是无法上网: 解决方法如下: 先查看虚拟机的网络适配器:点击虚拟机左上角的编辑,里面有个网络适配器 ...

  8. prime docker-compose 环境运行试用

    prime 是一款基于graphql的开源cms,功能点很不错,但是出来不久,还是有好多bug的 官方暂时没有提供docker 的运行方式,为了方便测试,搞了以及docker-compose 测试的 ...

  9. CloudStack学习-2

    环境准备 这次实验主要是CloudStack结合glusterfs. 两台宿主机,做gluster复制卷 VmWare添加一台和agent1配置一样的机器 系统版本:centos6.6 x86_64 ...

  10. Host does not support domain type kvm for virtualization type 'hvm' arch 'x86_64'

    kvm创建虚拟机报错: qemu-img create -f qcow2 /tmp/centos.qcow2 10G virt-install --virt-type kvm --name cento ...