师大附中 信息学奥林匹克竞赛辅导——程序设计试题答案部分 第21页
writeln; writeln('s=',s); end.
4. 求满足:A·B=716699并且A+B最小两个条件的A和B。
(答案:A=563;
B=1273)
(★★★)
program e; var
a,x,s,mina,minb:longint; begin
writeln; s:=716699; x:=trunc(sqrt(716699)); for a:=1 to x do
if (716699 mod a=0)and(a+(716699 div a)
begin s:=a+(716699 div a); mina:=a; minb:=(716699 div a); end; writeln('A=',mina,' B=',minb); end.
5. 一自然数平方的末几位与该数相同时,称此数为自同构数。例如,由于52=25,则称5为自同构
数。求出[1,700]以内的:(1)最大的自同构数;(2)自同构数数目。 (答案:①625
②)7)
(★★)
program e; var
i,count:longint; begin
writeln; count:=0; for i:=1 to 9 do
if (i*i-i) mod 10=0 then inc(count); for i:=10 to 99 do
if (i*i-i) mod 100=0 then inc(count); for i:=100 to 700 do
if (i*i-i) mod 1000=0 then begin inc(count); write(i:8); end; writeln; writeln('count=',count); end.
6. 若某不含数字0的三位正整数,其平方数至少有三位同样的数字,则称该三位数为三重数。例如,
由于:5112=261121(有三位1),所以511为三重数。求出:
(★★★★)
(1)按升序排列第10个三重数;(2)按升序排列前10个三重数之和;
(答案:(1)258;
(2)1826)
program e1; var
i,j,k,a,b,c,x,n,count,s:longint; aa:array[1..5]of integer; begin writeln;
s:=0; count:=0; for i:=111 to 316 do
师大附中 信息学奥林匹克竞赛辅导——程序设计试题答案部分 第22页
begin
a:=i div 100; b:=(i div 10) mod 10; c:=i mod 10; if ((a<>0)and(b<>0)and(c<>0)) then begin x:=i*i;
aa[1]:=x div 10000;
aa[2]:=(x div 1000) mod 10; aa[3]:=(x div 100) mod 10; aa[4]:=(x div 10) mod 10; aa[5]:=x mod 10; for j:=1 to 3 do begin n:=1;
for k:=j+1 to 5 do
if aa[j]=aa[k] then n:=n+1;
if n>2 then begin writeln(i:8,x:8); s:=s+i; count:=count+1; break; end; end; end;
if count=10 then break; end;
writeln(s:8); end.
7. 满足下列两个条件:(a)千位数字与百位数字相同(非0),十位数字与个位数字相同;(b)是某
两位数的平方。的四位正整数称为四位平方数。例如,由于:7744=882,则称7744为四位平方数。求出:(1)所有四位平方数的数目;(2)所有四位平方数之和。
(★★)
(分析:最小四位数1000是31.6的平方,最大的四位数9999是99.9的平方) (答案:①1;
②7744)
program e;
var
i,x,count,s:longint; begin
writeln; count:=0; s:=0; for i:=32 to 99 do begin x:=i*i;
if ((x div 1000)=((x div 100) mod 10))and(((x div 10) mod 10)=(x mod 10)) then begin inc(count); s:=s+x; end; end;
writeln('count=',count,' s=',s); end.
8. 其平方等于某两个正整数平方之和的正整数称为弦数。例如,由于32+42=52,因此5为弦数。
求[121,130]之间:(1)弦数数目;(2)最小的弦数;(3)最大的弦数。 (分析:设a2+b2=c2,且a
(★★★)
师大附中 信息学奥林匹克竞赛辅导——程序设计试题答案部分 第23页
(答案:①4; ②122; ③130)
program e; var
i,j,k,x,count:longint; begin
writeln; count:=0; for i:=121 to 130 do begin
x:=trunc(sqrt(i*i/2)); for j:=1 to x do begin
k:=trunc(sqrt(i*i-j*j)); if (i*i=j*j+k*k) then
begin inc(count); writeln(i,'*',i,'=',j,'*',j,'+',k,'*',k); break; end; end; end;
writeln('count=',count); end.
9. 求满足以下三个条件:(a)X2+Y2+Z2=512;(b)X+Y+Z之值最大;(c)X最小。的一组X、
Y、Z的值。
(★★★★)
(答案:X=22; Y=31; Z=34)
program e1;
var
x,y,z,n,m,maxs,minx,xx,yy,zz:integer; begin writeln;
n:=trunc(sqrt(51*51/3)); m:=trunc(sqrt((51*51-1*1)/2)); maxs:=0; minx:=51; for x:=n downto 1 do for y:=x to m do begin
z:=trunc(sqrt(51*51-x*x-y*y));
if (z>y)and(x*x+y*y+z*z=51*51) then
if ((x+y+z>maxs)or((x+y+z)=maxs)) then begin
maxs:=x+y+z; xx:=x; yy:=y; zz:=z; end; end;
writeln('x=',xx,' y=',yy,' z=',zz); end.
eax?e?axx?a?sin(x?a)?a?ln10. 计算Y?(精度10-4)(a=0.1、x=1.0)。 22(答案:0.0295) program e;
var
y,a,x:real;
(★)
师大附中 信息学奥林匹克竞赛辅导——程序设计试题答案部分 第24页
begin
writeln; a:=0.1; x:=1.0;
y:=(exp(a*x)-exp(-a*x))/2*sin(x+a)+a*ln((x+a)/2); writeln(y:0:4); end.
11. 倒勾股数是满足下列公式:
111??(设A>B>C)的一组(3个)整数(A、B、C),例如A2B2C2111??(156,65,60)是倒勾股数,因为。问: (★★) 1562652602(1)A、B、C之和小于100的倒勾股数有多少组? (2)满足(1)的诸组中,A、B、C之和最小的是哪组? (提示:把公式转化为A2B2=C2(A2+B2)) (答案:①2;
②a=20,
b=15,
c=12)
program e; var
a,b,c,count,mins,mina,minb,minc:longint; begin
writeln; count:=0; mins:=100; for c:=1 to 33 do
for b:=c+1 to 49 do for a:=b+1 to 97 do
if (a*a*b*b=c*c*(a*a+b*b))and(a+b+c<100) then begin
inc(count);
if (a+b+c writeln('count=',count,' a=',mina,' b=',minb,' c=',minc); end. 12. 设有十进制数字a、b、c、d、e,求在满足下列式子:abcd×e=dcba(a非0,e非0非1)的四 位数abcd中,求满足条件的最小的abcd和与之对应的e。 ★) (答案:1089; 9) (★ program e1; var a,b,c,d,e,x,y:longint; begin writeln; for a:=1 to 9 do for b:=0 to 9 do for c:=0 to 9 do for d:=0 to 9 do for e:=2 to 9 do 师大附中 信息学奥林匹克竞赛辅导——程序设计试题答案部分 第25页 begin x:=a*1000+b*100+c*10+d; y:=d*1000+c*100+b*10+a; if (x*e=y) then begin writeln(x:8,e:8); exit; end; end; end. 13. 求方程:x?3x?1?0在区间(0,1)内的解,精度为10-4。 ★) (答案:0.3473) program e; var x:real; begin writeln; x:=0.0001; repeat if (abs(x*x*x-3*x+1)<1e-4) then writeln(x:0:4); x:=x+0.0001; until x>=1; end. 14. 按递增顺序产生序列M中最小的80个数。M定义如下:数1属于M;若x属于M,则y=2x+1, z=3x+1也属于M,并求: (★★★★) 3 (★ (1) 该序列第50个元素之值;(2)该序列前50个元素之和。 (答案:(1)172; (2)3853) program e; var i,j,k,t,p,n:longint; a:array[1..100] of longint; begin writeln; p:=1; a[p]:=1; n:=1; while p<50 do begin a[n+1]:=2*a[p]+1; a[n+2]:=3*a[p]+1; n:=n+2; for i:=1 to n-1 do for j:=1 to n-i do if a[j]>a[j+1] then begin t:=a[j]; a[j]:=a[j+1]; a[j+1]:=t; end; p:=p+1; end; writeln(a[p]:8); end. 15. 在n个一连串的方格内填写字母A或B,但相邻两格内不能都填B。求所有可能的填写方案数。