硬币翻转问题coin
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
硬币翻转(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
答案:var n,i,j:longint;
a:array[1..500] of longint;
begin
assign(input,'coin.in');
assign(output,'coin.out');
reset(input);
rewrite(output);
read(n);
writeln(n);
for i:=1 to n do
begin
for j:=1 to n do
if i<>j then
if a[j]=1 then a[j]:=0 else a[j]:=1;
for j:=1 to n do
write(a[j]);
writeln;
end;
close(input);
close(output);
end.