问题描述

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
 //法一
#include <iostream>
#include <algorithm>
#include <cstdio>
using namespace std; int num[] = {, , , , , , , , },
N, ans; int getSum(int lh, int rh)
{
int sum = ;
for (int i = lh; i <= rh; i++)
{
sum = sum * + num[i];
}
return sum;
} void check()
{
for (int i = ; i < ; i++)
{
int a = getSum(, i);
if (a > N) continue;
for (int j = i + ; j < ; j++)
{
int b = getSum(i + , j);
int c = getSum(j + , );
if (b >= c && b % c == && (a + b/c == N)) {
ans++;
}
}
}
} void solve()
{
cin >> N;
do {
check();
} while(next_permutation(num, num + ));
printf("%d\n", ans);
} int main()
{
solve();
return ;
}

 //法二

 #include <algorithm>
#include <cstring>
#include <queue>
#define INF 0x3f3f3f3f
#define MAXN 100005
#define Mod 10001
using namespace std;
int vis[], n , ans;
int num[]; int getSum(int lh, int rh)
{
int sum = ;
for (int i = lh; i <= rh; i++) {
sum = sum * + num[i];
}
return sum;
} void check()
{
for (int i = ; i <= ; i++) {
int a = getSum(, i);
if (a > n) continue;
for (int j = i + ; j < ; j++) {
int b = getSum(i + , j); //[i+1, j]
int c = getSum(j + , ); //[j+1, 9]
if (b >= c && b % c == && a + b/c == n) {
ans++;
}
}
}
} void dfs(int step)
{
if (step == ) {
check();
}
else {
for (int i = ; i <= ; i++) {
if (!vis[i]) {
num[step] = i;
vis[i] = ;
dfs(step + );
vis[i] = ;
}
}
} } int main()
{
scanf("%d", &n);
ans = ;
memset(vis, , sizeof(vis));
dfs();
printf("%d\n", ans);
return ;
}
 //这里补充一个next_permutation()的用法
//蓝桥杯 2015省赛 第3题 三羊献瑞
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std; int a[] = {, , , , , , , , , };
int b, c;
int d; void solve()
{
do {
b = a[]* + a[]* + a[]* + a[];
c = a[]* + a[]* + a[]* + a[];
d = a[]* + a[]* + a[]* + a[]* + a[];
// if (b + c == d) {
// cout << b << " + " << c << " = " << d << endl;
// }
} while (next_permutation(a, a + ));
} int main()
{
solve();
return ;
}

//发现好多蓝桥杯省赛的题目 都可以用 next_permutation()轻松解决..

//还有之前整理的一个题目: http://www.cnblogs.com/douzujun/p/6669303.html

 
 

最新文章

  1. .Net语言 APP开发平台——Smobiler学习日志:如何快速实现地图定位时的地点微调功能
  2. 外网无法访问本地IIS站点
  3. java实战之解析xml
  4. eclipse安装activiti工作流插件
  5. Spark核心—RDD初探
  6. C#局域网聊天工具_UDP广播
  7. exist和not exist用法
  8. css3幻灯片换位效果
  9. 第一节windows系统安装虚拟机VMware 软件
  10. DI in ASP.NET Core
  11. 集合的综合练习:Poker牌
  12. Hibernate用注解生成表
  13. Python基础——6面向对象编程
  14. python模拟鼠标键盘操作 GhostMouse tinytask 调用外部脚本或程序 autopy右键另存为
  15. placeholder是H5的一个新属性,但是在IE9以下是不支持的
  16. vue 用户停留页面超过30分钟未操作 强制退出到登录页面
  17. ps最最基础的文档
  18. Intellij IDEA更改项目优先编译顺序
  19. gets() 与 scanf() 的小尴尬
  20. 项目报错 exception &#39;MongoConnectionException&#39; with message &#39;Failed to connect to: 127.0.0.1:27017: Authentication failed on database &#39;www&#39; with username &#39;www&#39;: auth failed&#39; in

热门文章

  1. 【原创】CA证书申请+IIS配置HTTPS+默认访问https路径
  2. 学习笔记 | CDQ分治
  3. 第十九次ScrumMeeting博客
  4. 第一次scrum meeting
  5. 20135202闫佳歆--week5 分析system_call中断处理过程--实验及总结
  6. Linux内核分析-构造一个简单的Linux系统MenuOS
  7. 重温jsp①
  8. beta 圆桌 3
  9. nodemoduleOfCheerio
  10. fetch API &amp; upload file