最新Noip真题

这个问题也很简单,只是考察一些基本的编程能力,一点难度都没有。只要你用心,这道题的分数是很容易得到的。

在这里,数字用字符串表示(当然也可以用其他方法),因为方便处理。

n元加法是本课题的亮点,处理如下:

1)字符->;数字,可以用数组来简化程序,也就是数字和字符数组。

2)做加法,保留所有位数,进位,就像做高精度加法一样。

g是进位。

常数

步骤:整数= 0;

chars:数组[0..15] of char=('0 ',' 1 ',' 2 ',' 3 ',' 4 ',' 5 ',' 6 ',' 7 ',' 8 ',' 9 ',' A ',' B ',' C ',' D ',' E ',' F ');

定义变量

digit:整数的数组[char];

I,n,g:整数;

m,s:字符串;

ok:布尔型;

开始

for i:=0到9 do digit[char(ord(' 0 ')+I)]:= I;

for i:=0到5 do digit[char(ord(' A ')+I)]:= I+10;

写(' n = ');readln(n);

写(' m = ');readln(s);

for I:= 1 to length(s)do s[I]:= up case(s[I]);

重复

ok:=真;

对于i:=1到长度(s) div 2 do

如果s[I]& lt;& gts[长度(s)+1-i]那么ok:= false;

如果可以,则断开;

inc(步);

m:= s;g:= 0;

对于I:=长度(m)向下到1 do

开始

s[I]:= chars[(digit[m[I]]+digit[m[length(m)+1-I]]+g)mod n];

g:=(digit[m[I]]+digit[m[length(m)+1-I]]+g)div n;

结束;

如果g & gt0然后s:= chars[g]+s;

直到步骤& gt=30;

如果可以的话

writeln('STEP= ',STEP)

其他

writeln('不可能');

结束。

没问题,请采纳。如果你有任何问题,请提问。