分区联赛模拟试题2
http://www.mydrs.org 11/5/2001 大榕树
一、回答问题 1、 假定有四个元素A,B,C,D进一个栈,出栈顺序是ABCD,请写出所有数目的进栈序列。 2、 设A是一个n阶上三角阵,将这个上三角阵按列序存储一维数组b[n*(n+1)/2]中,如果a[I,j]存放在b[k],那么请给出求解k的计算公式。 3、 设A是一个一维数组a[m*n],现将这个数组按列序存储在一个m*n的矩阵B中,如果a[k]存放在b[I,J],那么请给出求解I,J的计算公式。 二、程序设计 1、尾数前移 一个整数的尾数是a(可以多位),把尾数a移到其前面(成为最高位)后所得的数为原整数的b(一位数字)倍,原整数为多大? 这是《数学通报》上发表的第一个具体的尾数前移问题。我们要求解一般的尾数前移问题:整数n的尾数a(可以多位)移到n的前面所得的数为n的b倍,记为n(a。b)。b为一位数字,且不大于尾数a(当a为一位时)或a的最高位数字(当a为多位时)。 设计程序,对于指定的尾数a与倍数b,寻求n(a,b)。 2、高精度开平方 求任意给定的正整数n的平方根,精确到小数点后指定的m位。 三、阅读程序 1、const Maxn=100; Maxk=100; type arr=array[1..Maxn]of integer; ktype=1..Maxk; var i,n,k:integer; a,b :arr; procedure counting(a,b:arr;n:integer;k:ktype); var i,j:integer; c : array[1..Maxk]of integer; begin fillchar(c,sizeof(c),0); for j:=1 to n do c[a[j]]:=c[a[j]]+1; for i:=2 to k do c[i]:=c[i]+c[i-1]; for j:=n downto 1 do begin b[c[a[j]]]:=a[j]; c[a[j]]:=c[a[j]]-1; end; for i:=1 to n do write(b[i]:5); writeln; end; begin write('N,K=');readln(n,k); for i:=1 to n do begin read(a[i]); if a[i]>k then begin writeln('error');halt;end; end; counting(a,b,n,k); readln; end. 第1组键盘输入: 8 6 3 6 4 1 3 4 1 4 第2组键盘输入: 5 3 4 2 1 8 2Output 1 1 3 3 4 4 4 6 error
|