Pascal 程序 求改错!RT:题目为:题目描述 Description国王有一个魔镜,可以把任何接触镜面的东西变成原来的两倍——只是,因为是镜子嘛,增加的那部分是反的.比如一条项链,我们用AB来表示,不同
来源:学生作业帮助网 编辑:作业帮 时间:2024/07/19 07:43:21
![Pascal 程序 求改错!RT:题目为:题目描述 Description国王有一个魔镜,可以把任何接触镜面的东西变成原来的两倍——只是,因为是镜子嘛,增加的那部分是反的.比如一条项链,我们用AB来表示,不同](/uploads/image/z/3692972-20-2.jpg?t=Pascal+%E7%A8%8B%E5%BA%8F+%E6%B1%82%E6%94%B9%E9%94%99%21RT%EF%BC%9A%E9%A2%98%E7%9B%AE%E4%B8%BA%EF%BC%9A%E9%A2%98%E7%9B%AE%E6%8F%8F%E8%BF%B0+Description%E5%9B%BD%E7%8E%8B%E6%9C%89%E4%B8%80%E4%B8%AA%E9%AD%94%E9%95%9C%2C%E5%8F%AF%E4%BB%A5%E6%8A%8A%E4%BB%BB%E4%BD%95%E6%8E%A5%E8%A7%A6%E9%95%9C%E9%9D%A2%E7%9A%84%E4%B8%9C%E8%A5%BF%E5%8F%98%E6%88%90%E5%8E%9F%E6%9D%A5%E7%9A%84%E4%B8%A4%E5%80%8D%E2%80%94%E2%80%94%E5%8F%AA%E6%98%AF%2C%E5%9B%A0%E4%B8%BA%E6%98%AF%E9%95%9C%E5%AD%90%E5%98%9B%2C%E5%A2%9E%E5%8A%A0%E7%9A%84%E9%82%A3%E9%83%A8%E5%88%86%E6%98%AF%E5%8F%8D%E7%9A%84.%E6%AF%94%E5%A6%82%E4%B8%80%E6%9D%A1%E9%A1%B9%E9%93%BE%2C%E6%88%91%E4%BB%AC%E7%94%A8AB%E6%9D%A5%E8%A1%A8%E7%A4%BA%2C%E4%B8%8D%E5%90%8C)
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.