大榕树 \ 信息学奥赛 \ 竞赛题库
分区联赛模拟试题2
原文链接:http://www.mydrs.org/program/list.asp?id=274
一、回答问题
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
作者:
来源:
时间:2001-11-05上一篇:分区联赛模拟试题1
下一篇:第二届分区联赛提高组复赛
大榕树 版权所有 ©1999-2006