一道关于PASCAL的搜索题

来源:百度知道 编辑:UC知道 时间:2024/05/16 02:17:35
扼,题目就是说从1到N位数中,用1和2来组成数字,但是相邻之间不可以有两个1,例如 输入N 3 可以的方案有 121 222 212 122 …………
要求输入N,然后输出共有多少组组成方案,一定要用PASCAL中的搜索做,我已经写出程序了,但是老师的评测系统说我的是错的,麻烦大家帮我看一下我错在哪里,并帮我改正过来,谢谢,不胜感激!

program lly;
const
f1='ss4.txt';
f2='ss4.out';
var
n,k:integer;
a:array[1..100]of integer;
procedure try(i,q:integer);
var
t:integer;
begin
if i>n then inc(k)
else for t:=1 to 2 do begin
if (i<>1) or (q<>1) then begin
a[i]:=t; q:=t;
try(i+1,q);
end;
end;
end;
begin
assign(input,f1);
assign(output,f2);
reset(input);
rewrite(output);
readln(n);
k:=0;
try(1,2);
writeln(k);
close(input);
close(output);
end.
我希望大家能帮我改过来,把完整的过程修改好发出来,谢谢

我用lazarus给你调的,lazarus中try是一个保留字,所以程序重新给你改了改。还有,貌似a这个数组不用吧,题目没说记下所有的情况。
稍微给你改了改程序,我手测的n=2、3、4都没问题。
program lly;
const
f1='ss4.txt';
f2='ss4.out';
var
n,sum:integer;
a:array[1..100]of integer;
procedure dfs(i,q:integer);
var t:integer;
begin
if i=n then inc(sum)
else
for t:=1 to 2 do
if (i<>1) or (q<>1) then
begin
a[i]:=t;
dfs(i+1,t);
end;
end;
begin
fillchar(a,sizeof(a),0);
assign(input,f1);reset(input);
readln(n);close(input);
sum:=0;
dfs(1,2);
assign(output,f2);rewrite(output);
writeln(sum);close(output);
end.

按时反对

不懂.
还是去问问老师吧.
要学会不耻下问.

我PASCAL让我删了,没法帮你测试一下了。不过我觉得,你递归时少了一个ELSE。