MagicFingerprint(pascal语言解答)[大牛进]3.MagicFingerprint源程序:MagicFingerprint.*输入文件:MagicFingerprint.in输出文件:MagicFingerprint.out时限:2S对于任意一个至少两位的正整数n,按如下方式定义magic(n)
来源:学生作业帮助网 编辑:作业帮 时间:2024/11/16 21:48:47
MagicFingerprint(pascal语言解答)[大牛进]3.MagicFingerprint源程序:MagicFingerprint.*输入文件:MagicFingerprint.in输出文件:MagicFingerprint.out时限:2S对于任意一个至少两位的正整数n,按如下方式定义magic(n)
MagicFingerprint(pascal语言解答)[大牛进]
3.MagicFingerprint
源程序:MagicFingerprint.*
输入文件:MagicFingerprint.in
输出文件:MagicFingerprint.out
时限:2S
对于任意一个至少两位的正整数n,按如下方式定义magic(n):将n按十进制顺序写下来,依次对相邻两个数写下差的绝对值.这样,得到了一个新数,去掉前导0,则定义为magic(n).若n为一位数,则magic(n)=n.
例如:magic(5913)=482,magic(1198)=081=81,magic(666)=00=0.
对任意一个数n,序列n,magic(n),magic(magic(n)),…迟早会变成一个一位数.最后的这个值称为数n的magic指纹.
例如,对于n=5913,我们得到序列:5913,482,46,2.所以5913的magic指纹为2.
若一个数的magic指纹为7,则认为这个数是个幸运数.
现在,给定A,B,计算出[A,B]中有多少个数是幸运数.
输入:
输入两行,每行一个数.第一行是A,第二行表示B.
输出:
输出[A,B]中有多少个数是幸运数.
样例:MagicFingerprint.in
1
9
MagicFingerprint.out
1
数据范围:
对30%数据,B≤10000.
对100%数据,0
MagicFingerprint(pascal语言解答)[大牛进]3.MagicFingerprint源程序:MagicFingerprint.*输入文件:MagicFingerprint.in输出文件:MagicFingerprint.out时限:2S对于任意一个至少两位的正整数n,按如下方式定义magic(n)
var
a,b:longint;
i:integer;
si:string;
k:integer;
function magic(j:string):string;//magic(j)求j的magic指纹
var
m:string;
ii:integer;
begin
if length(j)1 //判断是否为个位数
then begin
for ii:=length(j) downto 2 do m[ii-1]:=chr(abs(ord(j[ii])-ord(j[ii-1]))+48); //将n按十进制顺序写下来,依次对相邻两个数写下差的绝对值
magic:=magic(m); //递归调用magic
end
else magic:=j; //如果是个位数就等于它本身
end;
begin
assign(input,'MagicFingerprint.in'); //文件输入
reset(input);
readln(a,b);
close(input);
k:=0;
for i:=a to b do //从a到b循环
begin
str(i,si); //将i转化为字符串(si)
if magic(si)='7' then k:=k+1; //如果是幸运数就加1
end;
assign(output,'MagicFingerprint.out'); //文件输出
rewrite(output);
writeln(k);
close(output);
end.
用fp
不能再详细啦
要加分!