第七届蓝桥杯C/C++程序设计本科B组决赛 ——棋子换位(代码补全题)
棋子换位
有n个棋子A,n个棋子B,在棋盘上排成一行。
它们中间隔着一个空位,用“.”表示,比如:
AAA.BBB
现在需要所有的A棋子和B棋子交换位置。
移动棋子的规则是:
1. A棋子只能往右边移动,B棋子只能往左边移动。
2. 每个棋子可以移动到相邻的空位。
3. 每个棋子可以跳过相异的一个棋子落入空位(A跳过B或者B跳过A)。
AAA.BBB 可以走法:
移动A ==> AA.ABBB
移动B ==> AAAB.BB
跳走的例子:
AA.ABBB ==> AABA.BB
以下的程序完成了AB换位的功能,请仔细阅读分析源码,填写划线部分缺失的内容。
#include <stdio.h>
#include <string.h>
void move(char* data, int from, int to)//移动一个棋子A或者B到空位上
{
data[to] = data[from];
data[from] = '.';
} int valid(char* data, int k)//判断是否越界
{
if(k< || k>=strlen(data)) return ;
return ;
} void f(char* data)
{
int i;
int tag;
int dd = ; // 移动方向 while(){
tag = ;
for(i=; i<strlen(data); i++){
if(data[i]=='.') continue;
if(data[i]=='A') dd = ;
if(data[i]=='B') dd = -; if(valid(data, i+dd) && valid(data,i+dd+dd)
&& data[i+dd]!=data[i] && data[i+dd+dd]=='.'){
//如果能跳...
move(data, i, i+dd+dd);
printf("jump:%s\n", data);
tag = ;
break;
}
} if(tag) continue; for(i=; i<strlen(data); i++){
if(data[i]=='.') continue;
if(data[i]=='A') dd = ;//向右
if(data[i]=='B') dd = -;//向左 if(valid(data, i+dd) && data[i+dd]=='.'){
// 如果能移动...
if(valid(data, i+dd+dd) && valid(data,i-dd)&&data[i+dd+dd]==data[i-dd] ) continue; //填空位置
move(data, i, i+dd);
printf("move:%s\n", data);
tag = ;
break;
}
} if(tag==) break;
}
} int main()
{
char data[] = "AAA.BBB";
printf("%s\n",data);
f(data);
return ;
}
思路:
以下为程序运行时的输出:
初始:AAA.BBB
move:AA.ABBB
jump:AABA.BB
move:AABAB.B
jump:AAB.BAB
jump:A.BABAB
move:.ABABAB
jump:BA.ABAB
jump:BABA.AB
jump:BABABA.
move:BABAB.A
jump:BAB.BAA
jump:B.BABAA
move:BB.ABAA
jump:BBBA.AA
move:BBB.AAA
仔细想想,还是有规律的;注意看上面的第二行和第三行,从第二行的状态出发,走一次‘B’之后达到了一个状态:空点两侧都是‘B’了,也就是说空地两侧是相同的字符!——这个时候就不能再把最后一个B再向左移动(move)了,不然就卡死了!
下面的几个画横线的都是这样!这种题目确实不好想,解题思路应该进行一些调整,自己按照规则尝试运行运行,在自己模拟的过程中逐步发现规律,毕竟去掉这一行以后经常进入死循环!
第七届蓝桥杯C/C++程序设计本科B组决赛 ——棋子换位(代码补全题)的更多相关文章
- 2016年第七届蓝桥杯C/C++程序设计本科B组决赛
2.答案300 刁丝卫代码,比赛时long long写成int,结果成了263...一等擦肩而过... #include <iostream> #include <fstream&g ...
- 第七届蓝桥杯C/C++程序设计本科B组决赛 ——机器人塔(程序大题)
机器人塔 X星球的机器人表演拉拉队有两种服装,A和B.他们这次表演的是搭机器人塔. 类似: A B B A B A A A B B B B B A BA B A B B A 队内的组塔规则是: A 只 ...
- 第七届蓝桥杯C/C++程序设计本科B组决赛 ——凑平方数(填空题)
凑平方数 把0~9这10个数字,分成多个组,每个组恰好是一个平方数,这是能够办到的.比如:0, 36, 5948721 再比如:10985247361, 25, 63907840, 4, 289, 1 ...
- 2016年第七届蓝桥杯C/C++程序设计本科B组省赛
/* 2016年第七届蓝桥杯C/C++程序设计本科B组省赛 煤球数目(结果填空) 煤球数目 有一堆煤球,堆成三角棱锥形.具体: 第一层放1个, 第二层3个(排列成三角形), 第三层6个(排列成三角形) ...
- 2015年第六届蓝桥杯C/C++程序设计本科B组决赛
1.积分之谜(枚举) 2.完美正方形 3.关联账户(并查集) 4.密文搜索 5.居民集会 6.模型染色 1.积分之迷 小明开了个网上商店,卖风铃.共有3个品牌:A,B,C.为了促销,每件商品都会返固定 ...
- 2015年第六届蓝桥杯C/C++程序设计本科B组决赛 ——居民集会(编程大题)
标题:居民集会 蓝桥村的居民都生活在一条公路的边上,公路的长度为L,每户家庭的 位置都用这户家庭到公路的起点的距离来计算,第i户家庭距起点的距 离为di.每年,蓝桥村都要举行一次集会.今年,由于村里的 ...
- 2015年第六届蓝桥杯C/C++程序设计本科B组决赛 完美正方形
完美正方形 如果一些边长互不相同的正方形,可以恰好拼出一个更大的正方形,则称其为完美正方形.历史上,人们花了很久才找到了若干完美正方形.比如:如下边长的22个正方形 2 3 4 6 7 8 12 13 ...
- 2016年第六届蓝桥杯C/C++程序设计本科B组决赛 ——一步之遥(填空题题)
一步之遥 从昏迷中醒来,小明发现自己被关在X星球的废矿车里.矿车停在平直的废弃的轨道上.他的面前是两个按钮,分别写着“F”和“B”. 小明突然记起来,这两个按钮可以控制矿车在轨道上前进和后退.按F,会 ...
- 2019年第十届蓝桥杯C/C++程序设计本科B组省赛 E迷宫
试题 E: 迷宫 本题总分: 分 [问题描述] 下图给出了一个迷宫的平面图,其中标记为 的为障碍,标记为 的为可 以通行的地方. 迷宫的入口为左上角,出口为右下角,在迷宫中,只能从一个位置走到这 个它 ...
随机推荐
- 软件测试成熟度模型TCMM (转载)
下面我们就看看是如何划分的,来评判一下各位同仁自己所在的公司,所在的级别. TCMM Level 1:Initial(初始级) 测试处于一个混乱的状态,还不能把测试同调试分开,在编码完成后才进行测 ...
- SPSS 习题-2
1.有关SPSS数据字典的说法,正确的是: AA. SPSS 数据集的数据字典可以复制到其他数据集中B. SPSS数据集的数据字典是不能复制的C. SPSS的数据字典可以通过“复制”和“粘贴”在不同 ...
- <统计学>统计学开篇
我们或多多少都接触学习过统计学,可统计学到底是一种什么样的学科呢? 我们将统计学定义为:对数据进行收集.整理.展示.分析和解释,以帮助人们更有效地进行决策的科学. 关于统计学的研究通常分为两类:描述统 ...
- AtCoder Beginner Contest 147 E. Balanced Path
思路: dp,使用了bitset优化. 实现: #include <bits/stdc++.h> using namespace std; ; const int INF = 0x3f3f ...
- java端同时获取批量上传图片及其他数据
Controller层: @ResponseBody @RequestMapping(value = "", method = RequestMethod.POST) public ...
- Linux 环境变量设置的几种方法
From:http://home.eeworld.com.cn/home.php?mod=space&uid=291513&do=blog&id=40557 环境变量是和She ...
- Convolutional neural network (CNN) - Pytorch版
import torch import torch.nn as nn import torchvision import torchvision.transforms as transforms # ...
- go 食用指南
Golang高效食用秘籍 一.关于构建 1.1 go环境变量 $ go env // 查看go 的环境变量 其中 GOROOT 是golang 的安装路径 GOPATH 是go命令依赖的一个环境变量 ...
- conda命令入坑记
conda命令入坑记 本人使用的软件版本: TypeError: LoadLibrary() argument 1 must be str, not None 网上太多的资料,大多都是在讲path的设 ...
- 【dfs】Sequence Decoding
Sequence Decoding 题目描述 The amino acids in proteins are classified into two types of elements, hydrop ...