1999年—2011年信息学奥赛提高组初赛试题PASCAL(附答案,完整)

1999年—2011年信息学奥赛提高组初赛试题PASCAL(附答案,完整)|什么值得下=’0′)AND(tel[i]=’A’)AND(tel[i]b[k1][k2]Thengood:=FALSE;IfgoodThenBegin

Writeln(i,”,j);⑤;End;End;

IfNOThaveAnsThen

Writeln(‘Thereisnoanswer’);End。

2、(大整数开方)输入一个正整数n(1≤n<10100),试用二分法计算它的平方根的整数部分。

Const

SIZE=200;

Type

hugeint=Recordlen:Integer;

num:Array[1。

SIZE]OfInteger;End;

//len表示大整数的位数;num[1]表示个位、num[2]表示十位,以此类推Var

s:String;i:Integer;

target,left,middle,right:hugeint;

Functiontimes(a,b:hugeint):hugeint;//计算大整数a和b的乘积Var

i,j:Integer;ans:hugeint;Begin

FillChar(ans,SizeOf(ans),0);Fori:=1Toa。

lenDo

Forj:=1Tob。

lenDo

①:=ans。

num[i+j-1]+a。

num[i]*b。

num[j];Fori:=1Toa。

len+b。

lenDoBegin

ans。

num[i+1]:=ans。

num[i+1]+ans。

num[i]DIV10;②;

Ifans。

num[a。

len+b。

len]>0Thenans。

len:=a。

len+b。

len

Elseans。

len:=a。

len+b。

len-1;End;

times:=ans;End;

Functionadd(a,b:hugeint):hugeint;//计算大整数a和b的和Var

i:Integer;ans:hugeint;Begin

FillChar(ans。

num,SizeOf(ans。

num),0);Ifa。

len>b。

len

Thenans。

len:=a。

lenElseans。

len:=b。

len;Fori:=1Toans。

lenDoBegin

ans。

num[i]:=③;

ans。

num[i+1]:=ans。

num[i+1]+ans。

num[i]DIV10;ans。

num[i]:=ans。

num[i]MOD10;End;

Ifans。

num[ans。

len+1]>0ThenInc(ans。

len);add:=ans;End;

Functionaverage(a,b:hugeint):hugeint;//计算大整数a和b的平均数的整数部分Var

i:Integer;ans:hugeint;Begin

ans:=add(a,b);

Fori:=ans。

lenDownTo2DoBegin

ans。

num[i-1]:=ans。

num[i-1]+(④)*10;ans。

num[i]:=ans。

num[i]DIV2;End;

ans。

num[1]:=ans。

num[1]DIV2;Ifans。

num[ans。

len]=0ThenDec(ans。

len);average:=ans;End;

Functionplustwo(a:hugeint):hugeint;

//计算大整数a加2后的结果Var

i:Integer;ans:hugeint;Begin

ans:=a;

ans。

num[1]:=ans。

num[1]+2;i:=1;

While(i=10)DoBegin

ans。

num[i+1]:=ans。

num[i+1]+ans。

num[i]DIV10;ans。

num[i]:=ans。

num[i]MOD10;Inc(i);End;

Ifans。

num[ans。

len+1]>0

Then⑤;plustwo:=ans;End;

Functionover(a,b:hugeint):Boolean;//若大整数a>b则返回1,否则返回0Var

i:Integer;Begin

If(⑥)ThenBegin

over:=FALSE;Exit;End;

Ifa。

len>b。

lenThenBegin

over:=TRUE;Exit;End;

Fori:=a。

lenDownTo1DoBegin

Ifa。

num[i]b。

num[i]ThenBegin

over:=TRUE;Exit;End;End;

over:=FALSE;End;

Begin

Readln(s);

FillChar(target。

num,SizeOf(target。

num),0);target。

len:=Length(s);Fori:=1Totarget。