pascal神秘数列用深搜怎么做?

问题描述:

pascal神秘数列用深搜怎么做?
神秘数列
Line.pas/.c/.cpp
【问题描述】
研究中心正在研究一种数列,该数列由整数组成,每次可以对相邻的两个数进行相减操作,并删去这两个数,将运算结果替换进去.直到此数列只剩一个数为止.现在此研究中心欲使此最后剩下的数字为目标数,请你帮助他们完成这个任务.
若此数列为{12,10,4,3,5},目标数为4,E(n)表示对第n和第n+1数进行相减并替换.
E(2)={12,6,3,5} (6 = 10-4)
E(3)={12,6,-2} (-2 = 3-5)
E(2)={12,8} (8 = 6-(-2))
E(1)={4} (4 = 12-8)
则最后达到目的,数列仅剩一目标数,则此过程为:2,3,2,1
【输入文件】
输入文件line.in第一行为N (3≤N≤10),为数列中数的个数 .
第二行为M,为目标数 .
以下N行每行一个整数,为此数列中的数.
【输出文件】
输出文件line.out仅一行,输出总共可行方案的数量 .
【样例数据】
Line.in
5
4
12
10
4
3
5
Line.out
3
1个回答 分类:综合 2014-10-14

问题解答:

我来补答
type arr=array[1..12] of longint;
var i,j,n,m,count:longint;
a:arr;
procedure find(num:arr;len:integer);
var i,j:integer;
temp,temp1:longint;
b:arr;
begin
if (num[1]=m)and(len=1) then begin inc(count);exit; end;
if len=1 then exit;
for i:=1 to len-1 do
begin
b:=num;
num[i]:=num[i]-num[i+1];
for j:=i+1 to len do num[j]:=num[j+1];
find(num,len-1);
num:=b;
end;
end;
begin
assign(output,'line.out');rewrite(output);
assign(input,'line.in');reset(input);
readln(n);
readln(m);
for i:=1 to n do readln(a[i]);
find(a,n);
writeln(count);
close(output);
close(input);
end.
 
 
展开全文阅读
剩余:2000
上一页:第一个解释一下
下一页:例二,求解