主题:国王的魔镜
1l2j3y
[专家分:0] 发布于 2009-08-01 18:03:00
国王有一个魔镜,可以把任何接触镜面的东西变成原来的两倍——只是,因为是镜子嘛,增加的那部分是反的。
比如一条项链,我们用AB来表示,不同的字母表示不同颜色的珍珠。如果把B端接触镜面的话,魔镜会把这条项链变为ABBA。如果再用一端接触的话,则会变成ABBAABBA(假定国王只用项链的某一端接触魔镜)。
给定最终的项链,请编写程序输出国王没使用魔镜之前,最初的项链可能的最小长度。[em2]
回复列表 (共9个回复)
沙发
小田甜 [专家分:3910] 发布于 2009-08-01 21:14:00
由于只用边上接触“魔镜”,所以只要
1. 首先判断项链的长度是不是偶数,如果不是直接输出其长度并结束程序。
2. 从1到length div 2来判断a[i]=a[length+1-i]是否相等,如果不等直接输出其长度并结束程序。
3. 如果相等那么length:=length div 2,回到1重复执行程序。
板凳
tzhlryy [专家分:270] 发布于 2009-08-02 17:04:00
由于是这样的规则,所以无论怎么变,
当把AB变成1和0是会惊奇地发现初最初的项链,
其他有0和1组成的数字都是回文数,
由此判断,
不停的把项链在满足左边一半和右边一半相等的情况下折成相等的两段,
直至无法再折为止。
如:ABBAABBA
按不停的把项链在满足左边一半和右边一半相等的情况下折成相等的两段的规则剪段
则变成:ABBA,再次剪段,变成AB,发现无法再剪时输出AB,
结束程序
3 楼
zihao1231 [专家分:150] 发布于 2010-02-11 23:51:00
程序:
program magic //程序名。
var //定义。
a,b,n:string; //定义a,b,c变量为字符串型。
c:boolean; //定义c变量为布尔型。
i:integer; //定义i变量为长整型。
begin //主程序开始。
readln(n); //键盘输入字符串n。
repeat //直到循环开始。
c:=false; //定义c值为假。
if length(n) mod 2 = 0 then //判断n长度是否是偶数。
begin //是偶数就进入程序。
c:=true; //定义c为真。
for i:=1 to length(n) div 2 do //计数循环,从1到n的长度整除2.
if copy(n,i,1) <> copy(n,length(n)+1-i,1) then c:=false;//判断两遍是否吻合,否c为假。
if c:=true then n:=copy(n,1,length(n) div 2);//如果c为真,n就去掉一半。
end; //子程序结束。
until c=true; //直到c为真,推出循环。
writeln(length(n)); //输出n的长度。
end. //程序结束。
4 楼
小小DAVID [专家分:300] 发布于 2010-02-28 20:12:00
我顶你,杜子豪
5 楼
593170024 [专家分:500] 发布于 2010-04-10 22:23:00
好,我顶
6 楼
593170024 [专家分:500] 发布于 2010-04-10 22:29:00
有点错
program magic(这里;) //程序名。
var //定义。
a,b,n:string; //定义a,b,c变量为字符串型。
c:boolean; //定义c变量为布尔型。
i:integer; //定义i变量为长整型。
begin //主程序开始。
readln(n); //键盘输入字符串n。
repeat //直到循环开始。
c:=false; //定义c值为假。
if length(n) mod 2 = 0 then //判断n长度是否是偶数。
begin //是偶数就进入程序。
c:=true; //定义c为真。
for i:=1 to length(n) div 2 do //计数循环,从1到n的长度整除2.
if copy(n,i,1) <> copy(n,length(n)+1-i,1) then c:=false;//判断两遍是否吻合,否c为假。
if c:(这里去:)=true then n:=copy(n,1,length(n) div 2);//如果c为真,n就去掉一半。
end; //子程序结束。
until c=true; //直到c为真,推出循环。
writeln(length(n)); //输出n的长度。
end. //程序结束。
7 楼
593170024 [专家分:500] 发布于 2010-04-10 22:31:00
abbaabba 你的是4
8 楼
zihao1231 [专家分:150] 发布于 2010-04-18 16:57:00
程序是错了,repeat循环推出条件应该改成c=false
9 楼
zihao1231 [专家分:150] 发布于 2010-04-18 17:07:00
嘻嘻
我来回复