【第七届蓝桥杯大赛个人赛(软件类)决赛B组 棋子换位】
来源:互联网 发布:linux安装tortoisesvn 编辑:程序博客网 时间:2024/05/21 20:05
棋子换位
有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;}
注意:只提交划线部分缺少的代码,不要复制已有代码或填写任何多余内容。
要尽可能的避免移动后有相同的棋子挨着vaild(data,i + dd + dd) && vaild(data,i - dd) && data[i + dd + dd] == data[i - dd]
阅读全文
0 0
- 【第七届蓝桥杯大赛个人赛(软件类)决赛B组 棋子换位】
- 第七届蓝桥杯大赛个人赛决赛(软件类C语言B组)第一题:一步之遥
- 【第七届蓝桥杯大赛个人赛(软件类)决赛B组 一步之遥】
- 【第七届蓝桥杯大赛个人赛(软件类)决赛B组 机器人塔】+ dfs
- 【第七届蓝桥杯大赛个人赛(软件类)决赛B组 凑平方数 】+ DFS + set
- 【第七届蓝桥杯大赛个人赛(软件类)决赛B组】
- 第七届蓝桥杯决赛 棋子换位
- 第七届蓝桥杯大赛个人赛决赛(软件类C语言B组)第二题:凑平方数(深搜)
- 第七届蓝桥杯决赛JavaA组第三题_棋子换位
- 第七届蓝桥杯大赛个人赛(软件类)决赛真题
- 第七届蓝桥杯大赛个人赛(软件类)决赛——机器人塔
- 第七届蓝桥杯大赛个人赛省赛(软件类)B组真题
- 第七届蓝桥杯大赛个人赛省赛(软件类)真题 C语言B组 1
- 第七届蓝桥杯大赛个人赛省赛(软件类)真题 C语言B组 3
- 第七届蓝桥杯大赛个人赛省赛(软件类)java语言B组第二题:生日蜡烛
- 第七届蓝桥杯大赛个人赛省赛(软件类)java语言B组第三题:凑算式
- 第七届蓝桥杯大赛个人赛省赛(软件类)java语言B组第八题:四平方和
- 关联账户 第六届蓝桥杯大赛个人赛决赛(C语言B组)第三题
- 关于 单链表 的一些程序
- [leetcode]: 83. Remove Duplicates from Sorted List
- Composer切换中国镜像
- python都能做什么
- 单链表的功能使用:初始化,赋值,输出,删除,按值查找,按地址查找,数据修改
- 【第七届蓝桥杯大赛个人赛(软件类)决赛B组 棋子换位】
- 2017XMUCTF水题解答
- java多线程三种实现
- 图(2)——有向图
- [LeetCode]29. Divide Two Integers
- git基础和常见操作
- 第二章 创建和销毁对象
- Hibernate数据关联映射出现Could not execute JDBC batch update的异常处理
- 计算机软件推荐