pascal神进

硬币翻转(coin)在桌面上有一排硬币,共N枚,每一枚硬币均为正面朝上。现在要把所有的硬币翻转成反面朝上,规则是每次可翻转任意N-1枚硬币(正面向上的被翻转为反面向上,反... 硬币翻转(coin)

在桌面上有一排硬币,共N枚,每一枚硬币均为正面朝上。现在要把所有的硬币翻转成反面朝上,规则是每次可翻转任意N-1枚硬币(正面向上的被翻转为反面向上,反之亦然)。求一个最短的操作序列(将每次翻转N-1枚硬币成为一次操作)。

输入:
输入只有一行,包含一个自然数N(N为不大于100的偶数)。

输出:
输出文件的第一行包含一个整数S,表示最少需要的操作次数。接下来的S行每行分别表示每次操作后桌上硬币的状态(一行包含N个整数(0或1),表示每个硬币的状态:0——正面向上,和1——反面向上,不允许出现多余空格)。
对于有多种操作方案的情况,则只需输出一种。

样例:
coin.in
4

coin.out
4
0111
1100
0001
1111
展开
 我来答
Tian_lxt
2010-04-13 · TA获得超过342个赞
知道答主
回答量:105
采纳率:0%
帮助的人:0
展开全部
program coin;
const max=100;
var
n:integer;
rest:integer;
state:array[1..max] of integer;

procedure init;
begin
assign(input,'coin.in');
assign(output,'coin.out');
reset(input);
rewrite(output);
readln(n);
end;

procedure out;
var i:integer;
begin
for i:=1 to n do write(state[i]);
writeln;
end;

procedure doit;
var i,j:integer;
begin
writeln(n);
fillchar(state,sizeof(state),0);
rest:=0;
for i:=1 to n do
begin
for j:=1 to n do state[j]:=1-state[j];
j:=1;
while state[j]<>1-rest do inc(j);
state[j]:=rest;
out;
rest:=1-rest;
end;
end;

begin
init;
doit;
close(input);
close(output);
end.

参考资料: http://tieba.baidu.com/f?kz=121003617

czz5242199
2010-04-13 · TA获得超过190个赞
知道答主
回答量:280
采纳率:0%
帮助的人:162万
展开全部
自己去网上搜BFS的资料
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式