永发信息网

一个程序要pascal转成c语言的,急!

答案:1  悬赏:0  手机版
解决时间 2021-04-23 09:12
  • 提问者网友:爱了却不能说
  • 2021-04-22 12:45

程序:

program tjcoi1_2; { Write by Li Xuewu }

var

ga,gb,gc,gd,trn:array [0..15] of byte;

fd:array [0..15] of char;

resl:array [1..200] of string[6];

fname:string[20];

text2:text;

i,n,kz,ks,topa1,topb1,topc1,topd1,temp:byte;

procedure result(topa,topb,topc:byte;var ks:byte);

var i:byte;

begin

if (topa=0)and(topb=0)and(topc=0) then

begin

writeln('input filename for output:');

readln(fname);

assign(text2,fname); rewrite(text2);

for i:=1 to ks do

writeln(text2,resl[i]);

close(text2);

for i:=1 to ks do writeln(resl[i]);

halt(1);

end;

end;

procedure move1(var topa,topb,topc,topd,ks1:byte);

var t,i:byte;

begin

repeat

t:=0;

if ga[topa]=succ(gd[topd]) then

begin

t:=t+1; ks1:=ks1+1;

resl[ks1]:=chr(trn[ga[topa]]+ord('a')-1)+' A D';

topd:=topd+1; gd[topd]:=ga[topa]; topa:=topa-1;

end;

if gb[topb]=succ(gd[topd]) then

begin

t:=t+1; ks1:=ks1+1;

resl[ks1]:=chr(trn[gb[topb]]+ord('a')-1)+' B D';

topd:=topd+1; gd[topd]:=gb[topb]; topb:=topb-1;

end;

if gc[topc]=succ(gd[topd]) then

begin

t:=t+1; ks1:=ks1+1;

resl[ks1]:=chr(trn[gc[topc]]+ord('a')-1)+' C D';

topd:=topd+1; gd[topd]:=gc[topc]; topc:=topc-1;

end;

result(topa,topb,topc,ks1);

until t=0;

end;

procedure move2(topa,topb,topc,topd:byte;var ks:byte);

var kp,ks1:byte;

begin

kz:=kz+1;

result(topa,topb,topc,ks);

move1(topa,topb,topc,topd,ks);

for kp:=1 to 3 do

begin

case kp of

1:if(gb[topb]<gc[topc])and(topb>0) then

begin

ks1:=ks+1;

resl[ks1]:=chr(trn[gb[topb]]+ord('a')-1)+' B C';

topc:=topc+1; temp:=gb[topb];

gc[topc]:=temp; topb:=topb-1;

move2(topa,topb,topc,topd,ks1);

topb:=topb+1; gb[topb]:=temp; topc:=topc-1;

end;

2:if(ga[topa]<gc[topc])and(topa>0) then

begin

ks1:=ks+1;

resl[ks1]:=chr(trn[ga[topa]]+ord('a')-1)+' A C';

topc:=topc+1; temp:=ga[topa];

gc[topc]:=temp; topa:=topa-1;

move2(topa,topb,topc,topd,ks1);

topa:=topa+1; ga[topa]:=temp; topc:=topc-1;

end;

3:if(topa>0) then

begin

ks1:=ks+1;

resl[ks1]:=chr(trn[ga[topa]]+ord('a')-1)+' A B';

topb:=topb+1; temp:=ga[topa];

gb[topb]:=temp; topa:=topa-1;

move2(topa,topb,topc,topd,ks1);

topa:=topa+1; ga[topa]:=temp; topb:=topb-1;

end;

end;

end;

if kz=1 then

begin writeln('No solution!'); halt(1); end;

kz:=kz-1

end;

begin{main}

writeln('input disk number:');

readln(n);

writeln('input object column:(1-n char)');

for i:=1 to n do read(fd[i]);

readln;

for i:=1 to n do trn[i]:=ord(fd[i])-ord('a')+1;

for i:=1 to n do ga[trn[i]]:=i;

for i:=1 to n do write(trn[i]:2); writeln;

for i:=1 to n do write(ga[i]:2); writeln;

kz:=0; ks:=0;

topa1:=n; topb1:=0; topc1:=0; topd1:=0;

ga[0]:=0; gb[0]:=0; gc[0]:=100; gd[0]:=0;

move2(topa1,topb1,topc1,topd1,ks);

end.

圆盘问题

题目要求:从左向右依次安放 4 根细柱 A,B,C,D. 在 A 上套有 N (N≤20) 个直径相同的圆盘, 从下到上依次用连续的小写字母 a,b,c,...编号, 将这些圆盘经过B, C 单向地移入 D (即不允许从右向左移动). 圆盘可在 B,C 中暂存. 从键盘输入 N, 及前 N 个小写字母的一个排列, 它表示最后在 D 盘上形成的一个从下到上的圆盘序列。请用文本文件 ANS2.TXT 输出形成这一排列的操作过程。该文件的每一行为一个形如 "k M L" 的字母序列, 其中 k 为圆盘编号, M 为k 盘原先的柱号, L 为新柱号。或者直接在屏幕上输出"No", 表示不能生成这种排列。

例: ┃ ┃ ┃ ┃

键盘输入: ┃ ┃ ┃ ┃

3 d ━╋━ ┃ ┃ ┃

acb c ━╋━ ┃ ┃ ┃

则一个正确的输出文件 b ━╋━ ┃ ┃ ┃

可以是: a ━╋━ ┃ ┃ ┃

c A B ━━┻━━━┻━━━┻━━━┻━ 

b A C A B C D

a A D

b C D

c B D

不然有这个问题的C语言也可以

谢谢!!!

最佳答案
  • 五星知识达人网友:走死在岁月里
  • 2021-04-22 12:56
你好 楼主。

很幸运的看到你的问题。
但是又很遗憾到现在还没有人回答你的问题。也可能你现在已经在别的地方找到了答案,那就得恭喜你啦。
可能是你问的问题有些专业了,没人会。或者别人没有遇到或者接触过你的问题,所以帮不了你。建议你去问题的相关论坛去求助,那里的人通常比较多,也比较热心,可能能快点帮你解决问题。
希望我的回答也能够帮到你!
祝你好运。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯