[codevs2230]黑白棋子
题目链接
http://www.luogu.org/problem/show?pid=1259#
http://codevs.cn/problem/2230/
题目描述
有2n个棋子(n≥4)排成一行,开始为位置白子全部在左边,黑子全部在右边,如下图为n=5的情况:
○○○○○●●●●●
移动棋子的规则是:每次必须同时移动相邻的两个棋子,颜色不限,可以左移也可以右移到空位上去,但不能调换两个棋子的左右位置。每次移动必须跳过若干个棋子(不能平移),要求最后能移成黑白相间的一行棋子。如n=5时,成为:
○●○●○●○●○●
任务:编程打印出移动过程。
输入输出格式
输入格式:
一个整数n(n<=50)
输出格式:
若干行,表示初始状态和每次移动的状态,用"o"表示白子,"x"表示黑子,"-"表示空行。
输入输出样例
输入样例#1:
7
输出样例#1:
ooooooo*******--
oooooo--******o*
oooooo******--o*
ooooo--*****o*o*
ooooo*****--o*o*
oooo--****o*o*o*
oooo****--o*o*o*
ooo--***o*o*o*o*
ooo*o**--*o*o*o*
o--*o**oo*o*o*o*
o*o*o*--o*o*o*o*
--o*o*o*o*o*o*o*
思路
分析样例数据可以看到,在最前方的白棋还剩下三个以上时,我们可以把最后一个白棋和其后的第一个黑棋一起移动到空格的位置,输出,然后把最后两个黑棋移动到空格的位置,输出。在最前方的白棋还剩下3个时,继续这样的方法就不适用了。因为无论如何都会到达还剩三步的状态,所以寻找规律直接输出最后几行即可。
四个指针的作用:l:连续的最后一个白棋出现的位置;h:连续的最后一个黑棋出现的位置;j第一个空格的位置;k:最后一个空格的位置
var a:array[..] of char;
n,i,j,k,l,h,x,y:longint; procedure printf;
var i:longint;
begin
for i:= to *n+ do write(a[i]);
writeln;
end; begin
readln(n);
for i:= to n do
a[i]:='o';
for i:=n+ to n* do
a[i]:='*';
a[*n+]:='-';
a[*n+]:='-';
printf;
l:=n;//last'o'
h:=*n;//last'*'
j:=*n+;k:=*n+;//'-'
while l> do
begin
a[j]:=a[l];
a[k]:=a[l+];
a[l]:='-';
a[l+]:='-';
printf;
a[l]:='*';
a[l+]:='*';
a[h]:='-';
a[h-]:='-';
if l<> then printf;
k:=h;
j:=h-;
dec(l);
dec(h,);
end;
write('ooo*o**--*');
for i:= to n- do write('o*');
writeln;
write('o--*o**oo*');
for i:= to n- do write('o*');
writeln;
write('o*o*o*--o*');
for i:= to n- do write('o*');
writeln;
write('--o*o*o*o*');
for i:= to n- do write('o*');
writeln;
end.
当然,你也可以机(wu)智(chi)地寻找字符串之间的规律然后输出,虽然本人对于这种乱搞的做法表示十分愤慨,不过还是给大家把代码贴上。
program st;
var n,i,j:longint;
begin
read(n);
for j:= to *(n-)- do
begin
//write('step ',j,':');
for i:= to n-(j+) div do
write('o');
if j mod <> then write('--');
for i:= to n-(j+) div do
write('*');
if j mod = then write('--');
for i:= to (j+) div do write('o*');
writeln;
end;
// write('step ',j+,':');
write('ooo*o**--*');
for i:= to n- do write('o*');
writeln;
// write('step ',j+,':');
write('o--*o**oo*');
for i:= to n- do write('o*');
writeln;
// write('step ',j+,':');
write('o*o*o*--o*');
for i:= to n- do write('o*');
writeln;
//write('step ',j+,':');
write('--o*o*o*o*');
for i:= to n- do write('o*');
writeln;
end.
[codevs2230]黑白棋子的更多相关文章
- 【分治】黑白棋子的移动-C++
题目描述 有2n个棋子(n≥4)排成一行,开始为位置白子全部在左边,黑子全部在右边,如下图为n=5的情况: ○○○○○●●●●● 移动棋子的规则是:每次必须同时移动相邻的两个棋子,颜色不限,可以左移也 ...
- 在4x4的棋盘上摆满了黑白棋子,黑白两色的位置和数目随机其中左上角坐标为(1,1),右下角坐标为(4,4),现在依次有一些翻转操作,要对一些给定支点坐标为中心的上下左右四个棋子的颜色进行翻转,请计算出翻转后的棋盘颜色。
// ConsoleApplication10.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream& ...
- BZOJ.2668.[CQOI2012]交换棋子(费用流zkw)
题目链接 首先黑白棋子的交换等价于黑棋子在白格子图上移动,都到达指定位置. 在这假设我们知道这题用网络流做. 那么黑棋到指定位置就是一条路径,考虑怎么用流模拟出这条路径. 我们发现除了路径的起点和终点 ...
- Java实例---黑白五子棋[单机版]
程序分析 FiveChessFrame.java package com.ftl.frame; import java.awt.Color; import java.awt.Font; import ...
- bzoj 2756奇怪的游戏
2756: [SCOI2012]奇怪的游戏 Time Limit: 40 Sec Memory Limit: 128 MB Description Blinke 最近喜欢上一个奇怪的游戏. 这个游戏 ...
- codevs1004四子连棋[BFS 哈希]
1004 四子连棋 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 在一个4*4的棋盘上摆放了14颗棋子,其中有7颗 ...
- Codevs p1004 四子连棋
四子连棋 题目描述 Description 在一个4*4的棋盘上摆放了14颗棋子,其中有7颗白色棋子,7颗黑色棋子,有两个空白地带,任何一颗黑白棋子都可以向 ...
- 【宽度优先搜索】神奇的状态压缩 CodeVs1004四子连棋
一.写在前面 其实这是一道大水题,而且还出在了数据最水的OJ上,所以实际上这题并没有什么难度.博主写这篇blog主要是想写下一个想法--状态压缩.状态压缩在记录.修改状态以及判重去重等方面有着极高的( ...
- BNUOJ 13105 nim博弈
ncredible Chess Time Limit: 2000ms Memory Limit: 32768KB This problem will be judged on LightOJ. Ori ...
随机推荐
- Python用format格式化字符串
format是是python2.6新增的一个格式化字符串的方法,相对于老版的%格式方法,它有很多优点. 1.不需要理会数据类型的问题,在%方法中%s只能替代字符串类型 2.单个参数可以多次输出,参数顺 ...
- java 动态代理理解
动态代理,顾名思义就是动态创建一个代理对象,无需手动为被代理类创建一个代理类,java的动态代理通过Proxy类和Invocation接口实现,代码如下: //被代理接口 public interfa ...
- posix和system v有什么区别/?
posix和system v有什么区别/?现在在应用时应用那一标准浮云484212 | 浏览 243 次 2014-11-06 10:362014-11-19 22:36 最佳答案们是有关信号量的两组 ...
- tomcat 7 下添加 shared/lib 文件夹
你打开tomcat7\conf\catalina.properties文件再打开tomcat5的,看完后, 你就知道了 tomcat 5.5.35 # # List of comma-separate ...
- 《深入理解javascript原型和闭包系列》 知识点整理
深入理解javascript原型和闭包系列 对原型和闭包等相关知识的讲解,由浅入深,通俗易懂,每个字都值得细细研究. 一.一切都是对象 1. typeof操作符输出6种类型:string boolea ...
- jQuery.Validate自定义规程的使用案例
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 在ubuntu下关闭笔记本触摸板
http://www.cnblogs.com/icejoywoo/archive/2011/04/14/2016318.html 原文地址:http://forum.ubuntu.org.cn/vie ...
- JAVA HASHMAP 如何用
HASHMAP最好与实例联系起来..它主要存的是键与值的关系. 举个例子如你现在有一个学生类import java.util.HashMap;public class Student {String ...
- 一个CLI的 的例子
1)这是CLI 调用HTTPOST例子 #using <System.dll> using namespace System;using namespace System::Net;usi ...
- Qt中如何写一个model(自定义一个RowNode,我没有碰到过)
在qt中,用到最多就是model/view的结构来表示数据层及表示层的关系.model用于给view提供数据.那如何来实现一个简单的树形model呢. 实现一个自己的model需要重载以下的方法: Q ...