带分数(dfs,next_permutation)
100 可以表示为带分数的形式:100 = 3 + 69258 / 714。
还可以表示为:100 = 82 + 3546 / 197。
注意特征:带分数中,数字1~9分别出现且只出现一次(不包含0)。
类似这样的带分数,100 有 11 种表示法。
从标准输入读入一个正整数N (N<1000*1000)
程序输出该数字用数码1~9不重复不遗漏地组成带分数表示的全部种数。
注意:不要求输出每个表示,只统计有多少表示法!
#include<iostream>
#include <algorithm>
using namespace std; int sum(int start,int end,int a[])
{
int i,sum=0;
for(i=start; i<end; i++)
sum=sum*10+a[i];
return sum;
} int main()
{
int m,aws=0,a[10];
int i,j; scanf("%d",&m);
for(i=0; i<9; i++)
a[i]=i+1;
do
{
for(i=1; i<10; i++)
{
int m1=sum(0,i,a);
if(m1>=m)
continue; //不满足条件直接跳过
for(j=i+(10-i)/2; j<9; j++) //从第一个数用过的数后开始
{
int m2=sum(i,j,a);
int m3=sum(j,9,a);
if(m2%m3==0&&m==m1+m2/m3)
{
aws++; // 统计符合条件的
}
}
}
}
while(next_permutation(a, a+9)); //枚举全排列
printf("%d",aws);
return 0;
}
其中next_permutation函数部分可以用dfs代替,代码如下:(关于用dfs实现全排列的思想请见链接:http://www.cnblogs.com/curo0119/p/8414195.html)
#include<cstdio>
#include <algorithm>
#include <cmath>
using namespace std;
int flag[11]={0};
int a[11];
int ncount=0;
int pp=0;
int getSum(int start,int end,int a[])
{
int sum=0;
for(int i=start;i<end;i++)
{
sum=sum*10+a[i];
}
return sum;
}
void Found(int a[],int n)
{
int re1,re2,re3;
re1=0;
re2=0;
re3=0;
for(int i=1;i<10;i++)
{
re1=getSum(0,i,a);
if(re1>=n) continue;
for(int j=i+(10-i)/2;j<9;j++)
{
re2=getSum(i,j,a);
re3=getSum(j,9,a);
if(re2>re3&&re2%re3==0&&n==re1+re2/re3)
{
ncount++;
}
}
}
}
void DFS(int start,int m)//对1~9进行全排列
{
int i;
if(start==9)
Found(a,m); //每排好一个序列调用一次该函数,判断是否满足等式
else
{
//排序列
for(i=1; i<10; i++)
{
if(!flag[i])
{
a[start]=i;
flag[i]=1; //标记是否用过
DFS(start+1,m);//选择好一位开始选下一位
flag[i]=0;//根据递归函数的压栈过程,把当前序列已经标记过的解除标记(从0到9全解除后再进入下一次序列的生成)
} //当返回上一级的dfs的时候,会接着执行下面的语句,不会重复调用dfs了(函数的压栈过程)
}
}
} int main()
{
int n;
scanf("%d",&n);
int i,j;
int a[10]; for(i=0;i<9;i++)
{
a[i]=i+1;
}
DFS(0,n);
printf("%d",ncount);
return 0;
}
本文转载于:http://blog.csdn.net/zhangffyy/article/details/54952548
带分数(dfs,next_permutation)的更多相关文章
- 蓝桥杯 带分数 DFS应用
问题描述 100 可以表示为带分数的形式:100 = 3 + 69258 / 714. 还可以表示为:100 = 82 + 3546 / 197. 注意特征:带分数中,数字1~9分别出现且只出现一次( ...
- 三羊献瑞:dfs / next_permutation()
三羊献瑞 观察下面的加法算式: 祥 瑞 生 辉 + 三 羊 献 瑞------------------- 三 羊 生 瑞 气 (如果有对齐问题,可以参看[图1.jpg]) 其中,相同的汉字代 ...
- 蓝桥杯练习系统历届试题 带分数 dfs
问题描述 100 可以表示为带分数的形式:100 = 3 + 69258 / 714. 还可以表示为:100 = 82 + 3546 / 197. 注意特征:带分数中,数字1~9分别出现且只出现一次( ...
- 洛谷 P1618 三连击(升级版)【DFS/next_permutation()/技巧性枚举/sprintf】
[链接]:https://www.luogu.org/problemnew/show/P1618 题目描述 将1,2,…,9共9个数分成三组,分别组成三个三位数,且使这三个三位数的比例是A:B:C,试 ...
- 带分数dfs+剪枝优化
#include<iostream>#include<cstdio>#include<cstdlib>#include<ctime>using name ...
- 2015第六届蓝桥杯C/C++ B组
奖券数目:枚举 有些人很迷信数字,比如带“4”的数字,认为和“死”谐音,就觉得不吉利.虽然这些说法纯属无稽之谈,但有时还要迎合大众的需求.某抽奖活动的奖券号码是5位数(10000-99999),要求其 ...
- HDU1027 Ignatius and the Princess II 【next_permutation】【DFS】
Ignatius and the Princess II Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K ( ...
- 蓝桥杯 算法提高 3000米排名预测 DFS 递归搜索 next_permutation()使用
#include <iostream> #include <algorithm> #include <queue> #include <cstring> ...
- 蓝桥杯 - 带分数 (DFS)
历届试题 带分数 时间限制:1.0s 内存限制:256.0MB 问题描写叙述 100 能够表示为带分数的形式:100 = 3 + 69258 / 714. 还能够表示为:10 ...
随机推荐
- Kali配置网络
虚拟机NAT网关:192.168.50.1 主机VM8网址:192.168.50.2 虚拟机网卡:192.168.50.30 vim /etc/network/interfaces # The loo ...
- 根据wsdl文件,Java工程自动生成webservice客户端调用
根据wsdl文件,Java工程自动生成webservice客户端调用 1,工具:带有webservice插件的myeclips 2,步骤: (1),新建一个Java工程:relationship (2 ...
- CSS style 属性
CSS style 属性 定义和用法 必需的 type 属性规定样式表的 MIME 类型. type 属性指示 <style> 与 </style> 标签之间的内容. 值 &q ...
- C++设计模式 之 “组件协作”模式:Template Method、Strategy、Observer
“组件协作”模式: #现代软件专业分工之后的第一个结果是“框架与应用程序的划分”,“组件协作”模式通过晚期绑定,来实现框架与应用程序之间的松耦合,是二者之间协作时常用的模式. #典型模式: Templ ...
- Delphi XE5 for Android (四)
在Delphi中窗体与窗体之间的交互与调用非常简单,在FMX中这个优势得到了充分体现,先建立一个主窗体和一个需要调用的窗体: 在主窗体上放的按钮事件如下: - private { Pr ...
- Unity 之 Vector3
class Variables one 指向(0,0,0) zero 指向(1,1,1) right指向 x轴的方向 Up 指向 y轴的方向 forward 指向 z轴的方向
- js与jquery对象的互转
//dom对象 var odiv = document.getElementById('box'); //dom对象转化成JQ对象, 在通过原生的方法获取到元素后,给它加上$() //$(odiv). ...
- The way to Go(4): Go runtime及解释器
Reference: Github: Go Github: The way to Go Go runtime Go runtime: 尽管 Go 编译器产生的是本地可执行代码,这些代码仍旧运行在 Go ...
- 使用caffe训练自己的图像数据(未完)
参考博客:blog.csdn.net/drrlalala/article/details/47274549 1,首先在网上下载图片,猫和狗.直接保存下载该网页,会生成一个有图片的文件夹.caffe-m ...
- mvc ---- ajax 提交过来的Json格式如何处理(解析)
前台传过来的不是一个对象,而是一个Json字符串怎么办 ? 如: {","contents":"<p>lsdfjlsdjflsdf</p> ...