问题描述

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的长度时,明显不符条件)

源码如下:

 1 #include <stdio.h>
 2 #define LEN 9
 3
 4 int n;
 5 int a,b,c;
 6 int sum = 0 , len = 0;
 7 int ans[LEN+1] = {0};
 8 int num[LEN+1] = {0,1,2,3,4,5,6,7,8,9,};
 9 int f[LEN+1] = {0};
10
11 void dfs(int x)
12 {
13     int i , j;
14     int x1,x2,x3;
15     if (x > 9)
16     {
17         x = x1 = x2 = x3 = 0;
18         /*1.确定第一个值x1*/
19         for (i = 0 , j = 1 ; i < a ; i ++)
20         {
21             x1 += ans[++x]*j;
22             j *= 10;
23         }
24
25         /*2.确定分数的分子x2*/
26         for (i = 0 , j = 1 ; i < b ; i ++)
27         {
28             x2 += ans[++x]*j;
29             j *= 10;
30         }
31
32         /*3.确定分数的分母x3*/
33         for (i = 0 , j = 1 ; i < c ; i ++)
34         {
35             x3 += ans[++x]*j;
36             j *= 10;
37         }
38
39         if (x2%x3 == 0 && (x1 + x2/x3) == n)
40         {
41             sum ++;
42             //printf("%d+%d/%d\n",x1,x2,x3);
43         }
44         return ;
45     }
46
47     for (i = 1 ; i <= 9 ; i ++)
48     {
49         if (!f[i])
50         {
51             ans[x] = num[i];
52             f[i] = 1;
53             dfs(x+1);
54             f[i] = 0;
55         }
56     }
57
58     return ;
59 }
60
61 int main(void)
62 {
63     int i;
64     scanf("%d",&n);
65     i = n;
66     while(i)
67     {
68         i = i/10;
69         len ++;    /*获取n的长度*/
70     }
71
72     for (a = 1 ; a <= len ; a ++)
73     {
74         i = LEN-a;
75         b = i - i/2;
76         c = i - b;
77         if (b < c)/*b必定为较大区间*/
78         {
79             b = b^c;
80             c = b^c;
81             b = b^c;
82         }
83
84         /*更改b和c的比例*/
85         while (c)
86         {
87             dfs(1);
88             b ++;
89             c --;
90         }
91     }
92     printf("%d",sum);
93     return 0;
94 }

转载于:https://www.cnblogs.com/mind000761/p/8552007.html

PREV-3_蓝桥杯_带分数相关推荐

  1. 蓝桥杯题目——带分数

    文章目录 前言 解题思路 全排列方法 递归实现 循环实现 组合数方法 循环实现 递归实现 浮点转整型思想 前言 本文介绍蓝桥杯题目--带分数,并且对其中包含的方法与思想进行总结,本文是上半部分. 参考 ...

  2. 【Scratch】青少年蓝桥杯_每日一题_9.09_画圆形渐变螺旋

    用心写好每一篇文章 效果图 一.题目背景 本题是Scratch编程问题,出现在第十届蓝桥杯国赛赛中. 二.编程实现 绘制一个颜色变化的圆形螺旋﹐画螺旋与画圆形的方法类似.提示∶ 1.画圆形的方法:前进 ...

  3. 【Scratch】青少年蓝桥杯_每日一题_7.09_加减大师

    用心写好每一篇文章 效果图 一.题目背景 本题是Scratch编程问题,出现在蓝桥杯第十一届的选拔赛考试中. 二.编程实现 博士汪是加减大师,它会随机地出加减算式,并判断玩家回答的得数是否正确.如果它 ...

  4. 【Scratch】青少年蓝桥杯_每日一题_6.09_密码

    用心写好每一篇文章 效果图 一.题目背景 本题是Scratch编程问题,出现在2020年4月的线上省赛模拟考试中. 二.编程实现 输入用户名"蓝桥杯",密码"123456 ...

  5. 【Scratch】青少年蓝桥杯_每日一题_6.01_画春花

    用心写好每一篇文章 效果图 一.题目背景 本题是Scratch编程问题,出现在第十届蓝桥杯的选拔赛中. 二.编程实现 设置背景为白色,选择画笔颜色值为0,粗细为5,以坐标(0,0)点为中心绘制一个如下 ...

  6. 【Scratch】青少年蓝桥杯_每日一题_5.25_排序

    用心写好每一篇文章 效果图 一.题目背景 本题是Scratch编程问题,出现在第十届蓝桥杯省赛中. 二.编程实现 老师给小猫出了一道题:在列表1中生成5个在1~99范围内的随机整数﹐然后按照从大到小的 ...

  7. 【Scratch】青少年蓝桥杯_每日一题_5.07_猜数字

    用心写好每一篇文章 效果图 一.题目背景 本题是Scratch编程问题,出现在第十届蓝桥杯选拔赛中. 二.编程实现 小猫从1-100之间随机取一个数字,让玩家来猜自己取的这个数字﹔ 一共有10次猜的机 ...

  8. 【Scratch】青少年蓝桥杯_每日一题_5.01_画三五七边型

    用心写好每一篇文章 效果图 一.题目背景 本题是Scratch编程问题﹐出现在第十届蓝桥杯选拔赛中.这是一个图形题目﹐主要考察考生的分析能力.角度知识和scratch的画笔应用. 二.编程实现 1)设 ...

  9. 【Scratch】青少年蓝桥杯_每日一题_3.17_蹦床

    用心写好每一篇文章 先看效果图: 一.题目背景 本题是Scratch编程问题,出现在第十届蓝桥杯选拔赛中. 二.编程实现 导入背景库中的"blue sky",导入角色库中的&quo ...

最新文章

  1. 安装docker后遇到permision问题
  2. 技巧:利用 Python 实现多任务进程
  3. c#,winform,验证输入内容,文本框,长度,errorprovider组件,方便,快捷
  4. 河北高速盘点七大假牌假证违法案例:寒冬穿大裤衩开车
  5. 公开课-C++学习路线实战导引:从0开始到操作系统内核开发
  6. UVa 242 邮票和信封(完全背包)
  7. 语言专升本必背代码_2020年【山西省专升本】,专升本专业与考试科目,专升本招生院校,专升本报名流程大全!...
  8. class 第一个元素_第二章(第3节):网页元素定位和操作
  9. 读书笔记_unity4.x第十二章_3D数学基础
  10. SQL存储过程实例具体解释
  11. 带有调试器的Apache Camel Eclipse工具
  12. 查看linux中tcp连接数
  13. 阿里京东被怼假货泛滥;谷歌 CEO 承认中国版搜索 App 存在;YouTube 全球宕机 | 极客头条...
  14. DateTime和DateTime2
  15. asp获取计算机mac,ASP获取客户端MAC地址(源代码)
  16. 移动端网页开发注意点
  17. VS2012注册密钥
  18. 【c语言】矩阵的创建
  19. android netd守护进程机制 --- netd分析
  20. Android无线WiFi调试项目adbwifi摆脱数据线拔插烦恼无轻松远程调试

热门文章

  1. html ondrop未触发,javascript – TableDnD onDrop事件未触发
  2. linux内核在什么目录结构,Linux Kernel 目录结构说明
  3. centos非root用户创建用户_CentOS中用户和用户组管理
  4. 【阿里云MPS】Demo
  5. selenium:使用已打开的chrome浏览器
  6. 【maven】改造已有项目
  7. C语音的预处理,编译,汇编,链接过程分析
  8. 快搜浏览器_郑秀晶因腿粗再上热搜:怎么减肥才能不反弹?
  9. wamp中的index.php,codeigniter – 如何删除Wamp中的index.php?
  10. qt获取图像的每个像素rgb_【可视化-1】认识图像,从图像可视化开始