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 展开
在桌面上有一排硬币,共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 展开
展开全部
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.
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
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询