蓝桥杯 - 数字排列(今有7对数字) - [两种不同的DFS思路]
今有7对数字:两个1,两个2,两个3,...两个7,把它们排成一行。
要求,两个1间有1个其它数字,两个2间有2个其它数字,以此类推,两个7之间有7个其它数字。如下就是一个符合要求的排列:
17126425374635
当然,如果把它倒过来,也是符合要求的。
请你找出另一种符合要求的排列法,并且这个排列法是以74开头的。
注意:只填写这个14位的整数,不能填写任何多余的内容,比如说明注释等。
答案:
74151643752362
解法1:
按照n=1~7进行DFS:我们每次尝试在当前存在的若干空位中放入n,如果可以放入,就往下搜索n+1;
代码:
#include<bits/stdc++.h>
using namespace std;
int num[]={,,,,,,,,,,,,,,};
void dfs(int n)
{
if(n==) dfs(n+);
if(n==)
{
for(int i=;i<=;i++) printf("%d",num[i]); printf("\n");
return;
} for(int i=;i<=;i++)
{
if(i== || i== || i== || i==) continue;
int bak=i+n+;
if(bak>) continue; if(num[i]== && num[bak]==)
{
num[i]=num[bak]=n;
dfs(n+);
num[i]=num[bak]=;
}
}
}
int main()
{
dfs();
}
解法2:
按照pos=1~14进行DFS:我们每次暴力枚举要放入数字i = 1~7,如果 i 还未放入,就尝试在当前的空位pos和pos+i+1中放入i,如果可以放入,就往下搜索pos+1;
代码:
#include<bits/stdc++.h>
using namespace std;
int num[]={,,,,,,,,,,,,,,};
bool vis[];
void dfs(int pos)
{
if(num[pos]) dfs(pos+);
if(pos==)
{
for(int i=;i<=;i++) printf("%d",num[i]); printf("\n");
return;
} for(int i=;i<=;i++)
{
if(vis[i]) continue;
int bak=pos+i+;
if(bak>) continue;
if(num[pos]== && num[bak]==)
{
num[pos]=num[bak]=i; vis[i]=;
dfs(pos+);
num[pos]=num[bak]=; vis[i]=;
}
}
}
int main()
{
memset(vis,,sizeof(vis));
vis[]=vis[]=;
dfs();
}
蓝桥杯 - 数字排列(今有7对数字) - [两种不同的DFS思路]的更多相关文章
- 第三届蓝桥杯预赛真题_第一题_两种微生物 X 和 Y
/* 假设有两种微生物 X 和 Y X出生后每隔3分钟分裂一次(数目加倍),Y出生后每隔2分钟分裂一次(数目加倍). 一个新出生的X,半分钟之后吃掉1个Y,并且,从此开始,每隔1分钟吃1个Y. 现在已 ...
- 蓝桥杯 2014本科C++ B组 李白打酒 三种实现方法 枚举/递归
标题:李白打酒 话说大诗人李白,一生好饮.幸好他从不开车. 一天,他提着酒壶,从家里出来,酒壶中有酒2斗.他边走边唱: 无事街上走,提壶去打酒. 逢店加一倍,遇花喝一斗. 这一路上,他一共遇到店5次, ...
- Java实现 蓝桥杯 图书排列(全排列)
标题:图书排列 将编号为1~10的10本书排放在书架上,要求编号相邻的书不能放在相邻的位置. 请计算一共有多少种不同的排列方案. 注意,需要提交的是一个整数,不要填写任何多余的内容. 9 9 10 9 ...
- [蓝桥杯]PREV-21.历届试题_回文数字
问题描述 观察数字:, 都有一个共同的特征,无论从左到右读还是从右向左读,都是相同的.这样的数字叫做:回文数字. 本题要求你找到一些5位或6位的十进制数字.满足如下要求: 该数字的各个数位之和等于输入 ...
- [蓝桥杯][2016年第七届真题]路径之谜(dfs)
题目描述 小明冒充X星球的骑士,进入了一个奇怪的城堡. 城堡里边什么都没有,只有方形石头铺成的地面. 假设城堡地面是 n x n 个方格.[如图1.png]所示. 按习俗,骑士要从西北角走到东南角. ...
- C# 实现数字字符串左补齐0的两种方法
); MessageBox.Show(sss); return; 代码如上,自动补齐前面的0
- 蓝桥杯 问题 1110: 2^k进制数 (排列组合+高精度巧妙处理)
题目链接 题目描述 设r是个2^k 进制数,并满足以下条件: (1)r至少是个2位的2^k 进制数. (2)作为2^k 进制数,除最后一位外,r的每一位严格小于它右边相邻的那一位. (3)将r转换为2 ...
- Java实现第八届蓝桥杯国赛 数字划分
标题:数字划分 w星球的长老交给小明一个任务: 1,2,3-16 这16个数字分为两组. 要求: 这两组数字的和相同, 并且,两组数字的平方和也相同, 并且,两组数字的立方和也相同. 请你利用计算机的 ...
- Java蓝桥杯——排列组合
排列组合介绍 排列,就是指从给定n个数的元素中取出指定m个数的元素,进行排序. 组合,则是指从给定n个数的元素中仅仅取出指定m个数的元素,不考虑排序. 全排列(permutation) 以数字为例,全 ...
随机推荐
- Nginx 过期时间
客户端(浏览器)访问服务器上的资源后,会缓存在浏览器中,对于一些经常变更的静态资源,我们可以设置缓存时间,也就是设置静态资源的过期时间 [root@localhost ~]$ cat /usr/loc ...
- Nginx 解析PHP
配置如下: [root@localhost ~]$ cat /usr/local/nginx/conf/vhost/test.com.conf server { listen 80; server_n ...
- Splash args 属性
args属性可以获取加载时配置的参数,一般我们只传入URL,如下,args.url 就相当于加载时配置的URL参数,我们把它赋值给 url 变量然后返回:
- DrawCall 优化 .
unity3D 对于移动平台的支持无可厚非,但是也有时候用Unity3D 开发出来的应用.游戏在移动终端上的运行有着明显的效率问题,比如卡.画质等各种问题.自己在做游戏开发的时候偶有所得.对于主要影响 ...
- N76E003之ISP
Flash存储器支持硬件编程和应用编程(IAP).如果产品在研发阶段或产品需要更新软固件时,硬件编程就显得不太方便,采用在系统编程(ISP)方式,可使这一过程变得方便.执行ISP不需要将控制器从系统板 ...
- 在线电路编程 (ICP)
通过在线电路编程(ICP)编程Flash.如果产品在开发中,或在终端客户的产品需要固件升级,采用硬件编程模式非常困难且不方便.采用ICP方式将很简单,且不需要将微控制器从板上拆下来.ICP方式同样允许 ...
- jq判断滚动条向上还是向下
$(document).ready(function(){ ,t=; $(window).scroll(function(e){ p = $(this).scrollTop(); if(t<=p ...
- 《shiro框架》
20170929 shiro授权流程学习 shiro-filter执行流程 CacheManager(shiro缓存管理) JEESITE登录流程简单梳理 shiro与springMVC整合 shir ...
- ubuntu apt 代理设置
可以通过三种方法为apt-get设置http代理方法一这是一种临时的手段,如果您仅仅是暂时需要通过http代理使用apt-get,您可以使用这种方式.在使用apt-get之前,在终端中输入以下命令(根 ...
- Apache服务器SSL双向认证配置
以Win32版Apache与OpenSSL为例,介绍从创建数字证书到Apache配置的整个过程,希望对读者有所帮助. Apache是目前最流行的WEB服务器之一,借助OpenSSL库,我们可以在Apa ...