南海事件是什么:谁有PASCAL习题?

来源:百度文库 编辑:中科新闻网 时间:2024/04/28 04:40:52

1. 输入两个整数,按由大到小的顺序输出。
(1-1)
var a,b:integer;
begin
readln(a,b);
if a>=b then write(a,b) else write(b,a)
end.

(1-2)
var a,b:integer;
begin
readln(a,b);
if a>b then write(a:5,b:5) else write(b:5,a:5);
if a=b then write('a=b');
end.

2. 输入三个整数,按由大到小的顺序输出。
var a,b,c:integer;
max,min:integer;
begin
readln(a,b,c);
if a>b then begin max:=a; min:=b end
else begin min:=a; max:=b end;
if c>max then begin max:=c end;
if c<min then begin min:=c end;
writeln(max:5,a+b+c-max-min:5,min:5)
end.

3. 求和S=1+2+3+4+……10
var S,x:integer;
Begin
S:=0;
for x:=1 to 10 do
s:=x+s;
writeln(s);
end.
4. 求乘积 S=1*2*3*4*……10
var s:real;
x:integer;
begin
s:=1;
for x:=1 to 10 do
s:=s*x;
writeln(s:9:0);
end.v

5. 计算S=1-1/2+1/3-1/4+1/5-1/6+1/7-1/8+1/9-1/10的值
var i:integer;
s:real;
Begin
i:=1;s:=0;
for i:=1 to 10 do
if (i mod 2)>0 then s:=s+1/I
else s:=s-1/i; (此处很好!)
writeln(s:9:4)
end.

6. 有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。
var i,t,fz,fm:integer;
s:real;
begin
s:=0;fz:=2;fm:=1;
for i:=1 to 20 do
begin
s:=s+fz/fm;
t:=fz+fm;
fm:=fz;
fz:=t;
end;
writeln(s:8:2);
end.

7. 输入10个数字,求其中最大的那个数字。
var a:array[1..10] of integer;
i,max:integer;
begin
for i:=1 to 10 do readln(a[i]);
max:=a[1];
for i:=2 to 10 do if a[i]>max then max:=a[i];(逐个比)
write('Max=',max);
end.

8. 输入10个数字,求其中次大的那个数字。
var a:array[1..10] of integer;
i,max1,max2:integer;
begin
for i:=1 to 10 do readln(a[i]);
if a[1]>a[2] then begin max1:=a[i];max2:=a[2];end
else begin max1:=a[2];max2:=a[1];end;
for i:=3 to 10 do
if a[i]>max1 then begin max2:=max1;max1:=a[i]end;(max1用来比,max2接替max1)
write('Max2=',max2);
end.

9. 求和S=1+2+4+7+11……n(其中n是小于100的最大整数)(?)
var s,a,i:integer;
begin
s:=0;a:=1;i:=1;
while a<100 do
begin
i:=i+1; s:=a+s;
s:=s+a; a:=a+i;
a:=a+i-1; i:=i+1
end;
writeln(s);
end.

10. 求和S=1+2+4+8+16+32+……n(n是小于1000的最大整数)
var s,i:integer;
begin
s:=0;i:=1;
while (i<1000) do
begin
s:=s+i;
i:=i*2;
end;
writeln(s)
end.

11. 有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
var
a,b,c,i,n:integer;
s:real;
begin
readln(n);
a:=1;b:=0;s:=a+b;
for i:=1 to n-2 do
begin
c:=a+b;
s:=s+c;
a:=b;
b:=c;
end;
writeln(s:9:4);
end.

12. 打印出小九九乘法口诀表。
var
i,j:integer;
begin
writeln;
for i:=1 to 9 do
begin
for j:=1 to i do write(i:1,'*',j:1,'=',i*j:1,' ');
writeln;
end;
end.

var i,j:integer;
begin
for i:=1 to 9 do
begin
for j:=1 to i do
write(i,'*',j,'=',i*j,' ');
writeln;
end;
end.

13. 满足A3+B3+C3=ABC的数字称为水仙花数,求所有的100-999之间的水仙花数。
var a,b,c:integer;
begin
for a:=1 to 9 do
for b:=0 to 9 do
for c:=0 to 9 do
if a*a*a+b*b*b+c*c*c=100*a++10*b+c
then writeln(a,b,c);
end.

14. 判断输入的一个正整数是否是素数。
var n,i:integer;
b:boolean;
begin
readln(n);i:=2;b:=True;
while b and (i<=SQRT(n)) do
if (n mod i)=0 then b:=false
else i:=i+1;
if b=True then writeln('Yes')
else writeln('No');
end.

15. 将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
var
n,i:integer;
begin
readln(n);
i:=2;
while n mod i<>0 do i:=i+1;
write(n,'=',i);n:=n div i;
while i<=n do
begin
while n mod i=0 do
begin
write('*',i);
n:=n div i;
end;
i:=i+1;
end;
end.

16. 输入两个正整数m和n,求其最大公约数和最小公倍数。
var
m,n:integer;
function asd(a,b:integer):integer;
var x,y,i,j:integer;
begin
i:=a;j:=b;
x:=a mod b;
while x<>0 do
begin
a:=b;
b:=x;
x:=a mod b;
end;
x:=b;
writeln('[',a,',',b,']','=',x);
y:=j*i div b;
writeln('(',a,',',b,')','=',y);
end;
begin
readln(m,n);
asd(m,n);
end.

17. 求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有k=5个数相加),输入a和k,求s。
var
i,a,k:integer;
s,t:real;
begin
readln(a,k);
s:=a;t:=a;
for i:=2 to k do
begin
t:=t*10+a;
s:=s+t;
end;
write('S=',a,'+..+',t:0:0,'=',s:0:0);
end.

18. 一个不超过5位的整数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
var
s:string;b:boolean;i,j:integer;
begin
read(s);
j:=length(s);
i:=1;
b:=true;
while (i<=j) and b do
begin
b:=(s[i]=s[j]);
i:=i+1;
j:=j-1;
end;
if b then writeln('yes')
else writeln('no');
end.

19. 输入某年某月某日,判断这一天星期几。
const
a:array[1..12] of integer=(31,28,31,30,31,30,31,31,30,31,30,31);
b:string='SunMonTueWedThiFriSat';
var
year,month,day,i,s:integer;
begin
readln(year,month,day);
s:=0;
for i:=1 to year-1 do
begin
s:=(s+365) mod 7;
if i mod 4=0 then s:=s+1;
if i mod 100=0 then s:=s-1;
if i mod 400=0 then s:=s+1;
end;
for i:=1 to month-1 do s:=s+a[i];
if (year mod 400=0) or ((year mod 4=0)and(year mod 100<>0))then
if month>2 then s:=s+1;
s:=(s+day) mod 7;
for i:=3*s+1 to 3*s+3 do write(b[i]);
end.

20. 输入10个整数,按由大到小的顺序输出。
type
arr=array[1..10] of integer;
var
i,j,k:integer;
a:arr;
begin
for i:=1 to 10 do read(a[i]);
readln;
for i:=1 to 9 do
for j:=1 to 10-i do
if a[j]<a[j+1] then
begin
k:=a[j];
a[j]:=a[j+1];
a[j+1]:=k;
end;
for i:=1 to 10 do write(a[i]:2);
end.

21. 已知N!=1*2*3*……N,求S=1!+2!+3!+4!+ ……10!
var
i,j :integer;
s :real;
function fac(i:integer):real;
var
j :integer;s:real;
begin
s:=1 ;for j:=1 to i do s:=s*j;fac:=s;
end;
begin
s:=0;
for i:= 1 to 10 do s:=s+fac(i);
writeln(s);
end.

22. 同上,求S=1!+(1!+3!)+(1!+3!+5!)+ ……(1!+3!+5!+ ……13!)
var
j,i :integer;
s :real;
function fac(a:integer):real;
var k:integer;
b:real;
begin
b:=1;
for k:=1 to a do b:=b*k;
fac:=b;
end;
begin

for i:=1 to 7 do
for j:=1 to i*2-1 do
if j mod 2 = 1 then
begin
s:=s+fac(j);
end;

writeln(s:8:0);
end.

23. 进制转换,给定一个十进制的数字n,将它转换成 十六进制等值的数字。

24. 有n个人围成一圈,顺序排号。从第一个人开始报数(从1到5报数),凡报到5的人退出圈子,问最后留下的是原来第几号的那位,输入n,输出最后那个人的编号。
const
n=10;
var
a:array[1..n] of boolean;
i,j,k:integer;
begin
writeln;
for i:=1 to n do a[i]:=true;
i:=0;j:=0;k:=0;
while j<n do
begin
i:=i+1;
if i>n then i:=1;
if a[i] then
begin
k:=k+1;
if k=5 then
begin
a[i]:=false;
write(i:3);
k:=0;
j:=j+1;
end;
end;
end;
end. const
n=10;
var
a:array[1..n] of boolean;
i,j,k:integer;
begin
writeln;
for i:=1 to n do a[i]:=true;
i:=0;j:=0;k:=0;
while j<n do
begin
i:=i+1;
if i>n then i:=1;
if a[i] then
begin
k:=k+1;
if k=5 then
begin
a[i]:=false;
write(i:3);
k:=0;
j:=j+1;
end;
end;
end;
end.

25. 已知无穷小数 X=0.1234567891011…9899100101…,其中的数字是依次写下各自然数而得到的。试求出小数点后第 n 位数字。输入:从键盘输入 n。(n<=200)输出:输出小数点后第 n (180以内)位数字。
var
i,j,k,n:integer;
begin
readln(n);
if n<10 then writeln(n)
else
begin
i:=9+(n-8) div 2;
if n mod 2=0 then k:=i div 10
else k:=i mod 10;
writeln(k);
end;
end.

26. 螺旋方阵和数字三角形。
(26-1)
var
a:array[1..5,1..5]of integer;
i,j,k,u,d,l,r:integer;
begin
k:=1;l:=1;r:=5;u:=1;d:=5;
while k<=25 do
begin
for i:=u to d do begin a[i,l]:=k;k:=k+1;end;l:=l+1;
for i:=l to r do begin a[d,i]:=k;k:=k+1;end;d:=d-1;
for i:=d downto u do begin a[i,r]:=k;k:=k+1;end;r:=r-1;
for i:=r downto l do begin a[u,i]:=k;k:=k+1;end;u:=u+1;
end;
for i:=1 to 5 do
begin
for j:=1 to 5 do write(a[i,j]:3);
writeln;
end;
end.

(26-2)
var
a:array[1..10,1..10]of integer;
i,j,k,u,d,l,r,n:integer;
begin
readln(n);
k:=1;l:=1;r:=n;u:=1;d:=n;
while k<=n*n do
begin
for i:=u to d do begin a[i,l]:=k;k:=k+1;end;l:=l+1;
for i:=l to r do begin a[d,i]:=k;k:=k+1;end;d:=d-1;
for i:=d downto u do begin a[i,r]:=k;k:=k+1;end;r:=r-1;
for i:=r downto l do begin a[u,i]:=k;k:=k+1;end;u:=u+1;
end;
for i:=1 to n do
begin
for j:=1 to n do write(a[i,j]:3);
writeln;
end;
end.

27. 打印N行的杨辉三角。
var
a:array[1..10,1..10]of integer;
i,j,n:integer;
begin
readln(n);
for i:=1 to 10 do
for j:=1 to 10 do a[i,j]:=0;
for i:=1 to 10 do a[i,1]:=1;a[i,i]:=1;
writeln(1:n);
for i:=2 to n do
begin
write(a[i,1]:n-i+1);
for j:=2 to i do
begin
a[i,j]:=a[i-1,j-1]+a[i-1,j];
write(a[i,j]:3);
end;
writeln;
end;
end.

28. 高精度整数加法。输入两个不超过100位的正整数,求它们的和。
var
s1,s2,s3:string;k,k1,k2,k3,l1,l2,i:integer;
begin
readln(s1);readln(s2);
l1:=length(s1);l1:=length(s2);
if l1>l2 then for i:=1 to l1-l2 do s2:=s2+'0';
l1:=length(s1);l1:=length(s2);
k:=0;s3:=' ';
for i:=l1 downto 1 do
begin
k1:=ord(s1[i])-ord('0');
k2:=ord(s2[i])-ord('0');
k3:=k+k1+k2;
if k3>=10 then begin k:=1;k3:=k3-10;end
else k:=0;
s3:=chr(k3+ord('0'))+s3;
end;
if k=1 then s3:='1'+s3;
writeln(s3);
end.

29. 高精度实数减法。输入两个不超过100位的正整数,求它们的差。
var
i,k :integer;
s1,s2,s3:string;
k1,k2,k3:integer;
l1,l2 :integer;
begin
readln(s1);readln(s2);
l1:=length(s1);l2:=length(s2);
if (l1<l2) or (l1=l2) and (s1<s2) then
begin
s3:=s1;
s1:=s2;
s2:=s3;
write('-');
end;
l1:=length(s1);l2:=length(s2);
for i:=1 to l1-l2 do s2:='0'+s2;
k:=0;s3:=' ';
for i:=l1 downto 1 do
begin
k1:=ord(s1[i]) -ord('0');
k2:=ord(s2[i]) -ord('0');
k3:=k1-k2-k;
if k3<0 then begin k3:=k3+10;k:=1;end
else k:=0;
s3:=chr(ord('0')+k3)+s3;
end ;
while (length(s3)>1)and(s3[1]='0') do delete(s3,1,1);
writeln(s3);
end.

30. 高精度整数乘法。输入两个不超过100位的正整数,求它们的乘积。
var
s1,s2:string;
a,b,c:array[0..9]of integer;
i,j,k:integer;
begin
readln(s1);k:=length(s1);
for i:=0 to k-1 do a[i]:=ord(s1[k-i])-ord('0');
readln(s2);k:=length(s2);
for i:=0 to k-1 do b[i]:=ord(s2[k-i])-ord('0');
for i:=0 to 9 do c[i]:=0;
for i:=0 to 9 do
for j:=0 to 9 do c[i+j]:=c[i+j]+a[i]*b[j];
for i:=0 to 7 do
begin
k:=c[i];
c[i]:=c[i] mod 10;
c[i+1]:=c[i+1]+k div 10;
end;
j:=9;
while (c[j]=0) and (j>0) do j:=j-1;
for i:=j downto 0 do write (c[i]);
end.

31. 高精度实数加法减法。输入两个不超过100位的正实数,求它们的和或者差。
var
s1,s2,s3 :string;
l1,l2 :integer;
x1,x2,z1,z2 :integer;
pointpos :integer;
i,j,k :integer;
begin
readln(s1);readln(s2);
k:=pos('.',s1);if k=0 then s1:=s1+'.';
k:=pos('.',s2);if k=0 then s2:=s2+'.';
l1:=length(s1);k:=pos('.',s1);z1:=k-1;x1:=l1-k;
l2:=length(s2);k:=pos('.',s2);z2:=k-1;x2:=l2-k;
if z1>z2 then
for k:=1 to z1-z2 do s2:='0'+s2
else
for k:=1 to z2-z1 do s1:='0'+s1;
if x1>x2 then
for k:=1 to x1-x2 do s2:=s2+'0'
else
for k:=1 to x2-x1 do s1:=s1+'0';
k:=pos('.',s1);delete(s1,k,1);delete(s2,k,1);s3:=s1;pointpos:=k;
j:=0;
for i:=length(s3) downto 1 do
begin
k:=ord(s1[i])-ord('0')+ord(s2[i])-ord('0')+j;
if k>9 then begin j:=1;k:=k-10; end else j:=0;
s3[i]:=chr(ord('0')+k);
end;
insert('.',s3,pointpos);
if j=1 then s3:='1'+s3;
while s3[length(s3)]='0' do delete(s3,length(s3),1);
if s3[length(s3)]='.' then delete(s3,length(s3),1);
writeln(s3);
end.

32. 已知e=1+1/1!+1/2!+1/3!+***1/N!,求e的近似值精确到小数点后50位。

33. 循环小数化成分数。给定一个循环小数将它化成等值的分数,比如1.(3)=4/3.

34. 编程将整数1至n*n中的所有数字填入n*n方阵中,使其每一行每一列及对角线元素之和均相等。N为奇数。
var
a:array[1..5,1..5]of integer;i,j,k,tx,ty:integer;
begin
writeln;
for i:=1 to 5 do for j:=1 to 5 do a[i,j]:=0;
k:=1;a[1,3]:=1;i:=1;j:=3;
repeat
k:=k+1;tx:=i-1;ty:=j+1;
if tx =0 then tx:=5;
if ty=6 then ty:=1;
if a[tx,ty]<>0 then begin tx:=i+1;ty:=j;end;
i:=tx;j:=ty;a[i,j]:=k;
until k=25;
for i:=1 to 5 do
begin
for j:=1 to 5 do write(a[i,j]:3);
writeln;
end;
end.
35. 求1-10000中约数最多的那个数字是多少。比如6有4个约数1,2,3,6
36. 求N的K次方根,精确到小数点之后R位
37. 负进制,将十进制的正数X换成R进制,其中R <0。
38. 求2N-1的位数和最后500位数字。
39. 从M个互不相同的字母中选出N个的排列的所有情况。
40. 在N*N的国际象棋棋盘里摆上N个皇后,使他们相互不进行攻击,问有多少种不同的摆法,要求输入N,输出所有摆法的方案和方案总数
41. 有个奇怪的数列,其中1是他的元素,以后每个元素都是前面某个元素的2倍加1或者3倍加1,除此之外再没有其他的元素了,求这个数列的第100大的元素
42. 算24点,给定4个数字,通过+-*÷和括号的运算得到24,求这样的表达式。
43. 有一个式子1○2○3○4○5○6○7○8○9○0=108,○中既可以填+-*÷也可以不填,不如1○2不填就变成了12,求一种方法使式子成立。
44. 给定一个正整数不超过40位,在其中填上若干乘号,变成一个式子,问怎样填入使得结果最大。例如N=123,K=1,则最大成绩为36。
45. 给出一个合法的未配平的化学方程式,请配平它。
46. 邮票问题:一个信封上最多只能贴N张邮票,而邮票有K种,问如何安排 K中邮票的面值,使得最小的不能组合贴出的面值最大?

其中有些题目有参考答案

http://211.144.105.54/interact/modules/file/file.php?space_key=21&module_key=610&link_key=609&group_key=0
里面都是习题