pascal语言题:哪错了啊?

来源:百度知道 编辑:UC知道 时间:2024/06/08 15:32:54
产生数 全国青少年信息学奥林匹克分区联赛 (NOIp) 竞赛原题
给出一个整数 n(n<10^30) 和 k 个变换规则(k<=15)。

规则:
一位数可变换成另一个一位数:
规则的右部不能为零。
例如:n=234。有规则(k=2):
2-> 5
3-> 6
上面的整数 234 经过变换后可能产生出的整数为(包括原数):
234
534
264
564
共 4 种不同的产生数

我的题解:最后才得40

var k,i,j,l,h,x,y,n:longint;
a,b:array[1..100] of longint;
s,s1:string;
begin
readln(s);
i:=1;l:=length(s);
while s[i] in ['0'..'9'] do i:=i+1;
i:=i+1;
s1:=copy(s,i,l-i+1);
val(s1,k);
delete(s,i-1,l-i+2);
l:=length(s);
for i:=1 to l do a[i]:=1;
for i:=1 to k do
begin
readln(x,y);
for j:=1 to l do
if x=(ord(s[j])-48) then a[j]:=a[j]+1;
end;
h:=1;b[1]:=1;
for i:=1 to l do
begin
for j:=1 to h do b[j]:=b[j]*a[i];
for j:=1 to h do
if b[j]>9 then
begin
b[j

感觉你的代码有点乱
这是本人的程序,flyod+高精,虽然比较丑陋,但ac是没问题的
var a,s,p:array[0..30]of integer;
f:array[0..9,0..9]of boolean;
i,j,k,n,x,y,t:integer; ch:char;
begin

fillchar(a,sizeof(a),0);
fillchar(f,sizeof(f),false);
fillchar(s,sizeof(s),0);
fillchar(p,sizeof(p),0);
s[1]:=1;
i:=1;
repeat
read(ch);
if ch<>' ' then a[i]:=ord(ch)-ord('0');
inc(i);
until ch=' ';
n:=i-2; read(k);
for i:=1to k do
begin
readln(x,y);
f[x,y]:=true;
end;
for k:=0to 9 do
for i:=0to 9 do
for j:=0to 9 do
f[i,j]:=f[i,j]or (f[i,k]and f[k,j]);
for i:=0to 9 do f[i,i]:=true;
for i:=1to n do
for j:=0to 9 do
if f[a[i],j] then inc(p[i]);

for j:=1to n do
begin
t:=0;
for i:=1to 30 do
begin
s[i]:=s[i]*p[j]+t;
t:=s[i] div 10;
s[i]:=s[i]mod 10;
end;
end;
i:=30;
while s[i]=0 do de