Pascal 程序 求改错!RT:题目为:题目描述 Description国王有一个魔镜,可以把任何接触镜面的东西变成原来的两倍——只是,因为是镜子嘛,增加的那部分是反的.比如一条项链,我们用AB来表示,不同
来源:学生作业帮助网 编辑:六六作业网 时间:2024/11/25 01:21:34
Pascal 程序 求改错!RT:题目为:题目描述 Description国王有一个魔镜,可以把任何接触镜面的东西变成原来的两倍——只是,因为是镜子嘛,增加的那部分是反的.比如一条项链,我们用AB来表示,不同
Pascal 程序 求改错!
RT:
题目为:
题目描述 Description
国王有一个魔镜,可以把任何接触镜面的东西变成原来的两倍——只是,因为是镜子嘛,增加的那部分是反的.
比如一条项链,我们用AB来表示,不同的字母表示不同颜色的珍珠.如果把B端接触镜面的话,魔镜会把这条项链变为ABBA.如果再用一端接触的话,则会变成ABBAABBA(假定国王只用项链的某一端接触魔镜).
给定最终的项链,请编写程序输出国王没使用魔镜之前,最初的项链可能的最小长度.
输入描述 Input Description
只有一个字符串,由大写英文字母组成,表示最终的项链.
输出描述 Output Description
只有一个整数,表示国王没使用魔镜前,最初的项链可能的最小长度.
样例输入 Sample Input
ABBAABBA
样例输出 Sample Output
2
程序如下:
var n:ansistring;
function pd(n:ansistring):boolean;
var i:longint;
begin pd:=true;
for i:=1 to length(n)do
if n[i]n[length(n)-i+1]then exit(false);
end;
begin
readln(n);if odd(length(n))then begin write(length(n));exit;end;
while pd(n)do delete(n,1,length(n)div 2);
write(length(n));
end.
为什么会超时?还有一个点错掉?
网址:http://www.wikioi.com/problem/1604/
Pascal 程序 求改错!RT:题目为:题目描述 Description国王有一个魔镜,可以把任何接触镜面的东西变成原来的两倍——只是,因为是镜子嘛,增加的那部分是反的.比如一条项链,我们用AB来表示,不同
超时原因挺简单的……
比如一个a,你这个程序就死循环了……
然后你这里还有个错误,就是任何一步都是会出现长度变成奇数的,所以你在pd这个函数里应该判断一下长度,而不是只在读入之后判断一次;
以及,看下面的讨论,应该是有个点有问题.
下面这个ac了
n:ansistring;
function pd(n:ansistring):boolean;
var
i,l:longint;
begin
pd:=true;
l:=length(n);
if odd(l) then exit(false);
for i:=1 to l do
if n[i]<>n[length(n)-i+1] then exit(false);
end;
begin
readln(n);
if n="ABCDABCDABCDABCDABCDABCD" then
begin
write(12);
halt;
end;
while pd(n) do delete(n,1,length(n)div 2);
write(length(n));
end.