P
programsky
Unregistered / Unconfirmed
GUEST, unregistred user!
在字符表'1','2','3'上,生成一个由该字符表上的字符组成、含n个字符的序列,但要求生
成的序列中没有两个相邻子序列是相同的,(Pascal)
程序及注解:
program ed;{最严重的问题大于15的数没有输出}
var a:array[1..1000]of integer;n:integer;
function pd(m,nw:integer):boolean;{判断条件是否成立,其中nw是试验值是为函数设计的,开始没有设计这个参数}
var i,j{循环变量},k{检验是否全相等},temp{临时存放实验值所放位置的原数}:integer;p:boolean;
begin
i:=1;temp:=a[m];
a[m]:=nw;
repeat
p:=true;
k:=0;
for j:=1 to ido
if a[m-j+1]=a[m-j-i+1] then
k:=k+1;
if k=i then
p:=false;
i:=i+1;
until (i*2>n)or(p=false);
pd:=p;
a[m]:=temp;
end;
function max(m:integer):integer;
var i1:integer;{测试值}p1:boolean;{暂时保存测试结果}
begin
p1:=false;i1:=3;
repeat
p1:=pd(m,i1);
if p1 then
max:=i1;
i1:=i1-1;
until p1;
end;
proceduredo
ing;
var i2,j2:integer;p2:boolean;{i2是当前值的指针}
begin
i2:=1;
while (i2<>0) and (a[i2]<>4){这个判断可能有问题}do
begin
a[i2]:=a[i2]+1;
if pd(i2,a[i2]) then
begin
if i2<n then
begin
i2:=i2+1;
a[i2]:=0;
end
else
begin
p2:=true;
for j2:=1 to ndo
{去除含有4的错误结果}
if a[j2]=4 then
p2:=false;
if p2 then
begin
for j2:=1 to ndo
write(a[j2]);
writeln;
end;
while a[i2]>=max(i2)do
i2:=i2-1;
end;
end;
end;
end;
begin
readln;
doing;
readln;
end.
按照开始的想法程序的结果中是不该出现4的,但后来不得不筛掉4.
成的序列中没有两个相邻子序列是相同的,(Pascal)
程序及注解:
program ed;{最严重的问题大于15的数没有输出}
var a:array[1..1000]of integer;n:integer;
function pd(m,nw:integer):boolean;{判断条件是否成立,其中nw是试验值是为函数设计的,开始没有设计这个参数}
var i,j{循环变量},k{检验是否全相等},temp{临时存放实验值所放位置的原数}:integer;p:boolean;
begin
i:=1;temp:=a[m];
a[m]:=nw;
repeat
p:=true;
k:=0;
for j:=1 to ido
if a[m-j+1]=a[m-j-i+1] then
k:=k+1;
if k=i then
p:=false;
i:=i+1;
until (i*2>n)or(p=false);
pd:=p;
a[m]:=temp;
end;
function max(m:integer):integer;
var i1:integer;{测试值}p1:boolean;{暂时保存测试结果}
begin
p1:=false;i1:=3;
repeat
p1:=pd(m,i1);
if p1 then
max:=i1;
i1:=i1-1;
until p1;
end;
proceduredo
ing;
var i2,j2:integer;p2:boolean;{i2是当前值的指针}
begin
i2:=1;
while (i2<>0) and (a[i2]<>4){这个判断可能有问题}do
begin
a[i2]:=a[i2]+1;
if pd(i2,a[i2]) then
begin
if i2<n then
begin
i2:=i2+1;
a[i2]:=0;
end
else
begin
p2:=true;
for j2:=1 to ndo
{去除含有4的错误结果}
if a[j2]=4 then
p2:=false;
if p2 then
begin
for j2:=1 to ndo
write(a[j2]);
writeln;
end;
while a[i2]>=max(i2)do
i2:=i2-1;
end;
end;
end;
end;
begin
readln;
doing;
readln;
end.
按照开始的想法程序的结果中是不该出现4的,但后来不得不筛掉4.