棋子换位

有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)
{data[to] = data[from];data[from] = '.';
}int valid(char* data, int k)
{if(k<0 || k>=strlen(data)) return 0;return 1;
}void f(char* data)
{int i;int tag;int dd = 0; // 移动方向while(1){tag = 0;for(i=0; i<strlen(data); i++){if(data[i]=='.') continue;if(data[i]=='A') dd = 1;if(data[i]=='B') dd = -1;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("%s\n", data);tag = 1;break;}}if(tag) continue;for(i=0; i<strlen(data); i++){if(data[i]=='.') continue;if(data[i]=='A') dd = 1;if(data[i]=='B') dd = -1;           if(valid(data, i+dd) && data[i+dd]=='.'){ // 如果能移动...if( ______________________ ) continue;  //填空位置 move(data, i, i+dd);printf("%s\n", data);tag = 1;break;}}if(tag==0) break;                  }
}int main()
{char data[] = "AAA.BBB";    f(data);return 0;
}

注意:只提交划线部分缺少的代码,不要复制已有代码或填写任何多余内容。

Code

/*^....0^ .1 ^1^..     011.^     1.0^ 1  ^    ^0.11 ^        ^..^0.           ^ 0^.0            1 .^.1             ^0 .........001^.1               1. .111100....01^00                 11^        ^1. .1^1.^                              ^0  0^.^                                 ^0..1.1                                   1..^1 .0                                     ^  ^00.                                     ^^0.^^ 0                                     ^^110.^0   0 ^                                     ^^^10.01^^     10  1 1                                      ^^^1110.101     10  1.1                                      ^^^1111110010    01  ^^                                        ^^^1111^1.^           ^^^10  10^ 0^ 1                                            ^^111^^^0.1^       1....^11     0                                               ^^11^^^ 0..  ....1^   ^ ^1.     0^                                               ^11^^^ ^ 1 111^     ^ 0.10   00 11                                               ^^^^^   1 0           1.0^  ^0  ^0                                                ^^^^    0            0.0^  1.0  .^                                               ^^^^    1 1          .0^.^  ^^  0^                             ^1                ^^^^     0.         ^.11 ^      11                             1.                ^^^     ^ ^        ..^^..^      ^1                             ^.^               ^^^       .0       ^.00..^      ^0                              01               ^^^       ..      0..^1 ..        .1                             ^.^              ^^^       1 ^  ^0001^  1.        00                              0.             ^^^        ^.0 ^.1. 0^.        ^.^                             ^.^            ^^^         ..0.01 .^^.         .^                  1001        ^^            ^^^         . 1^. ^ ^.         11                0.    1         ^           ^^          0.0  ^.          0              ^0       1                   ^^^          0.0.^  1.          0^             0       .1                   ^^^          ...1   1.          00            .        .1                  ^^^           ..1      1.         ^.           0         .^                  ^^            ..0.     1.          .^          .         0                                  ..1     1.          01          .        .                                 ^ 0^.^     00          ^0          1.       ^                                 1 1.0      00           .            ^^^^^^                                   ..^      00           01                                                    ..1.       00           10                                                   1 ^^.1       00           ^.                                            ^^^    .1..        00            .1                                        1..01    ..1.1         00           1.                                       ..^      10^ 1^         00           ^.1                                      0 1      1.1           00            00                                       ^  1   ^.           00            ^.^                                        10^  ^^1.1           00             00                                              10^..^           1.             ^.                                               1.0 1            ^.              00                 00                            .^^            ^.              ^ 1                00   ^0000^     ^               011 0             ^.               00.0^              ^00000   1.00.1              11. 1              0               1^^0.01                      ^^^                01.^              ^                1   1^^                                       ^.^1 1                                                                              0...                                                                              1 ^1                                                                               1^ ^                                                                             .01                                                                             ^ 1..                                                          1.1            ^0.0^ 0                                                           1..01^^100000..0^1 1                                                            ^ 1 ^^1111^ ^^0 ^                                                             ^ 1      1000^.1                                                               ^.^     .   00..                                                                1.1    0.   01.                                                                  .    1.   .^1.                                                                 1    1.   ^0^ .                                                                 ^.1 00    01^.0                                                                  001.     .^*/
// VB_king —— 2016_Finals_B_C++_3.cpp created by VB_KoKing on 2019-05-19:23.
/* Procedural objectives:Variables required by the program:Procedural thinking:程序的第一个循环处理的是可以跳的情况,第二个循环处理的是可以走的情况,而在while循环中都是先把能跳的处理完之后在处理能走的;需要填空的地方代表可以走但是不走的情况,对比源程序走法和正确走法:源程序走法为:
AA.ABBB
AABA.BB
AAB.ABB
A.BAABB
.ABAABB
BA.AABB
B.AAABB 正确的走法为:
AA.ABBB
AABA.BB
AABAB.B
AAB.BAB
A.BABAB
.ABABAB
BA.ABAB
BABA.AB
BABABA.
BABAB.A
BAB.BAA
B.BABAA
BB.ABAA
BBBA.AA
BBB.AAA这个规律比较诡异,当左右两边的字母不相同("."不算在内)时,可以移动的那个字母;当左右两边的字母相同时,可以移动但不要移动。Functions required by the program:Determination algorithm:Determining data structure:*/
/* My dear Max said:
"I like you,
So the first bunch of sunshine I saw in the morning is you,
The first gentle breeze that passed through my ear is you,
The first star I see is also you.
The world I see is all your shadow."FIGHTING FOR OUR FUTURE!!!
*/
#include <stdio.h>
#include <string.h>void move(char* data, int from, int to)
{data[to] = data[from];data[from] = '.';
}int valid(char* data, int k)
{if(k<0 || k>=strlen(data)) return 0;return 1;
}void f(char* data)
{int i;int tag;int dd = 0; // 移动方向while(1){tag = 0;for(i=0; i<strlen(data); i++){if(data[i]=='.') continue;if(data[i]=='A') dd = 1;if(data[i]=='B') dd = -1;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("%s\n", data);tag = 1;break;}}if(tag) continue;for(i=0; i<strlen(data); i++){if(data[i]=='.') continue;if(data[i]=='A') dd = 1;if(data[i]=='B') dd = -1;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("%s\n", data);tag = 1;break;}}if(tag==0) break;}
}int main()
{char data[] = "AAA.BBB";f(data);return 0;
}

2016年第七届蓝桥杯C/C++ B组国赛 —— 第三题:棋子换位相关推荐

  1. 2016年第七届蓝桥杯C/C++ A组国赛 —— 第三题:打靶

    打靶 小明参加X星球的打靶比赛. 比赛使用电子感应计分系统.其中有一局,小明得了96分. 这局小明共打了6发子弹,没有脱靶. 但望远镜看过去,只有3个弹孔. 显然,有些子弹准确地穿过了前边的弹孔. 不 ...

  2. 2016年第七届蓝桥杯C/C++ C组国赛 —— 第二题:反幻方

    反幻方 我国古籍很早就记载着 2 9 4 7 5 3 6 1 8 这是一个三阶幻方.每行每列以及对角线上的数字相加都相等. 下面考虑一个相反的问题. 可不可以用 1~9 的数字填入九宫格. 使得:每行 ...

  3. 2016年第七届蓝桥杯C/C++ A组国赛 —— 第一题:随意组合

    标题:随意组合 小明被绑架到X星球的巫师W那里. 其时,W正在玩弄两组数据 (2 3 5 8) 和 (1 4 6 7) 他命令小明从一组数据中分别取数与另一组中的数配对,共配成4对(组中的每个数必被用 ...

  4. 2016年第七届蓝桥杯C/C++ B组国赛 —— 第一题:一步之遥

    标题:一步之遥 从昏迷中醒来,小明发现自己被关在X星球的废矿车里. 矿车停在平直的废弃的轨道上. 他的面前是两个按钮,分别写着"F"和"B". 小明突然记起来, ...

  5. 2015年第六届蓝桥杯C/C++ A组国赛 —— 第三题:显示二叉树

    标题:显示二叉树 排序二叉树的特征是: 某个节点的左子树的所有节点值都不大于本节点值. 某个节点的右子树的所有节点值都不小于本节点值. 为了能形象地观察二叉树的建立过程,小明写了一段程序来显示出二叉树 ...

  6. 2018年第九届蓝桥杯C/C++ C组国赛 —— 第三题:全排列

    标题:全排列 对于某个串,比如:"1234",求它的所有全排列. 并且要求这些全排列一定要按照字母的升序排列. 对于"1234",应该输出(一共4!=24行): ...

  7. 2016年第七届蓝桥杯C/C++B组省赛题目解析

    题目1:煤球数目 有一堆煤球,堆成三角棱锥形.具体: 第一层放1个, 第二层3个(排列成三角形), 第三层6个(排列成三角形), 第四层10个(排列成三角形), .... 如果一共有100层,共有多少 ...

  8. 2019第十届蓝桥杯C/C++ A组省赛 —— 第三题: 最大降雨量

    试题 C: 最大降雨量 本题总分:10 分 [问题描述] 由于沙之国长年干旱,法师小明准备施展自己的一个神秘法术来求雨. 这个法术需要用到他手中的 49 张法术符,上面分别写着 1 至 49 这 49 ...

  9. 2015年第六届蓝桥杯C/C++ A组国赛 —— 第五题:切开字符串

    标题:切开字符串 Pear有一个字符串,不过他希望把它切成两段. 这是一个长度为N(<=10^5)的字符串. Pear希望选择一个位置,把字符串不重复不遗漏地切成两段,长度分别是t和N-t(这两 ...

最新文章

  1. 用metfanzi识别文字
  2. 教师招聘要求计算机证,长沙市直教师招聘考试没有计算机证能考么?
  3. 2004-5-12+ 用DataSet实现分页
  4. Angularjs编写KindEditor,UEidtor指令
  5. 解决yum [Errno 256] No more mirrors to try
  6. virtualbox报错:Failed, trying without DKMS的解决方案
  7. pytorch: MaxUnpool2d 与 Upsampling
  8. 基于springboot的猫头鹰物业管理系统
  9. 算法笔记:Dinic最大流和SPFA费用流
  10. php 转gbk,php 中文怎么转gbk
  11. 低代码平台表单引擎技术方案选型
  12. Java 响应对象详解
  13. 21cn企业邮箱服务器端口号,21cn企业邮箱手机客户端设置--Android
  14. 第一次面试(厦门西联电子)
  15. java中如何在键盘中输入一串以逗号隔开数字然后存入数组中,并输出。
  16. 如何在大屏幕上滚动播放视频、图片和文字
  17. PTGUI 720 制作全景图
  18. 奇安信VS启明星辰 欲上市“新人”与上市“老手”的全面对比
  19. 阿甘修理机器人cd_【补偿】遗失的美好~
  20. easypr arm linux,arm linux下交叉編譯EasyPR中文車牌識別系統開發(一)

热门文章

  1. python之ORM操作
  2. linux经常使用解压缩命令
  3. 产品经理如何量化关键需求指标
  4. VC++ 中 try-catch-finally 语句 如何在获取正常信息是写一些操作语句
  5. ExtJS:鼠标移出菜单后菜单自动隐藏
  6. 海思芯片硬件java加速_海思Hi3719C V100芯片简介
  7. linux定位so快捷方式_Linux动态库(.so)搜索路径 | 学步园
  8. Java黑皮书课后题第11章:11.3(Account类的子类)在编程练习题9.7中定义了一个Account类来对一个银行账户建模。一个账户有账号、余额、年利率、开户日期等属性,以及存款和取款等方法
  9. Java黑皮书课后题第2章:*2.17(科学:风寒温度)外面有多冷?...twc=35.74+0.6215ta-35.75v0.16+0.4275tav0.16,输入度数、风速显示风寒温度
  10. C语言学习之从键盘输入一个小于1000的正数,要求输出它的平方根(如平方根不是整数,则输出其整数部分)