大小比较排序问题

余年寄山水
639次浏览
2020年11月30日 12:46
最佳经验
本文由作者推荐

太原理工大学分数线-青春雷锋

2020年11月30日发(作者:关颖)


一、大小比较排序问题
例题:读入三个数,输出最大数
program max;
var a,b,c,max:integer;
begin
read(a,b,c);
if (a>b) and (a>c) then write (a); {有多个条件时,每个条件要加小括号,否则出错}
if (b>c) and (b>a) then write(b);
if (c>a) and (c>b) then write(c);
end.
方法二
program max;
var a,b,c,max:integer;
begin
read(a,b,c);
max:=a;
if b>max then max:=b;
if c>max then max:=c;
write(max);
end.
例题:读入三个数,输出最小数
program min;
var a,b,c, min:integer;
begin
read(a,b,c);
if (a if (b>c) and (b>a) then write(b);
if (c>a) and (c>b) then write(c);
end.
方法二
program min;
var a,b,c, min:integer;
begin
read(a,b,c);
min:=a;
if b>max then max:=b;
if c write(min);
end.

例题:输入2个数,并将这2个数按从大到小的顺序排列。
Program abts;
Var
a,b,t:integer;
Begin
read(a,b);
if a[i] Begin
t:=a;
a:=b;
b:=t;
end.

读程序写结果:
程序1
program max1;
var a,b,c,max:integer;
begin
read(a,b,c);
if (a>b) and (a>c) then write (a);
if (b>c) and (b>a) then write(b);
if (c>a) and (c>b) then write(c);
end.
输入 25 90 10
结果:

程序2
program min2;
var a,b,c, min:integer;
begin
read(a,b,c);
if (a if (b if (cend.
输入 80 20 100
结果:

程序3
program max3;
var a,b,c,max:integer;
begin
read(a,b,c);
max:=a;
if b>max then max:=b;
if c>max then max:=c;
write(max);
end.
输入 91 62 110
结果:
程序4
program min4;


var a,b,c, min:integer;
begin
read(a,b,c);
min:=a;
if b> min then min:=b;
if c write(min);
end.
输入 92 162 10
结果:

程序 5
Program abts;
Var
a,b,t:integer;
Begin
read(a,b);
if a Begin
t:=a;
a:=b;
b:=t;
write(a:4,b:4);
end.
输入 92 10
结果:

程序6
Program abts;
Var
i,j:integer;
Begin
For i:=1 to 3 do
Write(i:3);
Writeln;
Writeln(i:3);
end.
结果:

程序7
Program abts;
Var
i,j:integer;
Begin
For i:=3 to 5 do
Write(i:2);
Writeln;
Writeln(i:2);
end.
结果:



程序8
Program abts;
Var
i,j:integer;
Begin
For i:=1 to 3 do
For j:=1 to 2 do
Write(i:3,j:3);
end.
结果:

程序9
Program abts;
Var
i,j:integer;
Begin
For i:=1 to 2 do
For j:=1 to 3 do
begin
Write(i:3,j:3);
If j=3 then writeln;
end;
end.
结果:

程序10
Program abts;
Var
i,j,t:integer;
Begin
For i:=1 to 3 do
Write(i:3);
Writeln;
Writeln(i:3);
For i:=1 to 3 do
For j:=i to 4 do
begin
Write(i:3,j:3);
If j=4 then writeln;


end;
end.
结果:


程序11
Program abts;
Const
A:array[1..5] of integer=(24,55,3,11,689);
Var
i,j,t:integer;
Begin
For i:=1 to 5 do
Write(a[i]:8);
Writeln;
For i:=1 to 5 do
For j:=i+1 to 5 do
if a[i] Begin
T:=a[i];
A[i]:=a[j];
A[j]:=t;
end;
For i:=1 to 5 do
Write(a[i]:8);
Writeln;
end.
结果:

程序12
Program max
Const
A:array[1..5] of integer=(30,33,3,11,123);
Var
Max,i:integer;
BEGIN
Max:=a[1];
For i:=1 to 5 do
if maxwriteln(max);
For i:=1 to 5 do
if a[i]=max then writeln(i);
END.
结果:

程序13
Program max
Const
A:array[1..5] of integer=(42,39,99,1,23);
Var
Max,i,maxi:integer;
BEGIN
Max:=a[1];
Maxi:=
For i:=1 to 5 do
if maxbegin
max:=a[i];
maxi:= i;
end;
writeln(max,maxi);
END.
结果:

程序13
Program max
Const
A:array[1..5] of integer=(30,33,3,11,123);
Var
min,i,mini:integer;
BEGIN
min:=a[1];
mini:=1;
For i:=1 to 5 do
if max>a[i] then
begin
min:=a[i];
max:= i;
end;
writeln(min, mini);
END.
结果:

二、闰年问题
程序填空: 例题:输入一个四位数年份,判断是否是闰年,是输出‘yes’,否则输出‘no’
年数能被4整 除,并且不能被100整除;或者能被400整除的整数年份。)
program nian;
var
n:word;
begin
read(n);
(闰年的计算方法:


if then write(‘yes’) else
end.
例题:打印某年某月有多少天。
program exam2(input,output);
var
year,month,days:integer;
begin
writeln('Please input year,month:');
3
case month of
1,3,5,7,8,10, 4 :days:=31;
4,6,9,11 : 5
2 :if 6
then days:=29
else 7
end;
writeln('year=',year,'month=',month,'days=',days)
end.

四、递推法问题
例题:生成菲波那契数列的前10项限 1,1,2,3,5,8,13,21,34,55
program fei;
var i:integer;
a:array[1..10] of integer;
begin
a[1]:=1;
a[2]:=1;
for i:=3 to 10 do
a[i]:=a[i-1]+a[i-2];
for i:=1 to 10 do
write(a[i]:5);
writeln;
end.
例题:计算n!,其中n由键盘输入。
程序如下:
program v4;
var
a:real;
n,i:integer;
begin
read(n);
a:=1;
for i:=2 to n do
a:=a*i;
write(n,a)
end.
五、数字问题
例题:求输入的一个整数的各位数字之和。
program exam4(input,output);
var
x,t,s:integer;
begin
readln(x);
s:=0;
while x<>0 do
begin
t:=x mod 10;
s:=s+t;
x:=x div 10
end;
writeln(s)
end.
例题:输入一个三位自然数,把这个数的百位与个位数对调,输出对调后的数。
[解]1.先确定输入数n是否三位数,即n>99且n<=999。
2.位数对调:n=abc→cba=x
①百位数a=n整除100;②十位数b=(n-a *100)整除10;③个位数c=n除以10的余数;
3.得对调后的数:x=c*100+b*10+a
program Threebit;
var x,n,a,b,c:INTEGER;
BEGIN write('Input 3 bit nature data:'); readln(n);
IF (n>99) and (n<1000) then
begin a:=n DIV 100; {求百位数}
b:=(n-a*100) DIV 10;{求十位数}
c:=n mod 10; {求个位数}
x:=c*100+b*10+a; {得新数X}
writeln('Number=',x:3);
end
ELSE writeln('Input error!');
END.
例题:求100-999中的水仙花数,(若三位数abc, abc=a*a*a +b*b*b+c*c*c,则称abc为水仙花数,如
153,1*1*1+5*5*5+3*3*3 =1+125+27=153,则153是水仙花数。
程序如下:
program v9;
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=a*100+b*10+c then
write(a*100+b*10+c:6);
readln


end.
六、统计问题
例题:从键盘敲进任意个(少于255个)字符,然后求出其中某一个字母的个数(如大写字母A)。
分析:用一个字符串变量来接受从键盘输入的字符,然后从第一个字符开始对每一个字符进行处理,如< br>果是A则个数加一,最后把总的统计个数输出。
程序代码:
program jjzx(input,output);
type
str=string[255];
var
st:str;
n,i,j:integer;
begin
writeln(‘请输入一行字符: ‘);
readln(st);
j:=lenth(st); {把字符串的实际长度赋给j}
n:=0;
for i:=1 to j do
if ord(st[i])=65 then n:=n+1;
writeln(‘你输入的字符是: ‘,st);
writeln((‘其中字符A的个数和: ‘,n)
end.
八、字母塔(字符输出问题)
例题:输出如下图形(n=5,n是行数)

每行的星号数与行数的关系: 行数*2-1=每行的个数
每行的空格数与行数的关系: 每行的空格数=N-行数
program xing
var
i,j,k,n:integer;
begin
read(n);{n假如是5}
for i:=1 to n do
begin
for k:=1 to n-i do {打印每行首的空格,个数是n- 所在的行数。此处两行也可换成:
write(‘ ‘:n-i+1) }
write(' ');
for j:=1 to i*2-1 do{打印每行的星号,个数是所在行*2-1}
write('*');
writeln;

end;

例题:输出如下图形

每行的星号数与行数的关系: (n-行数+1)*2-1=每行的个数
每行的空格数与行数的关系: 每行的空格数=行数 -1
program xing
var
i,j,k,n:integer;
begin
read(n);{n假如是5}
for i:=1 to n do
begin
for k:=1 to i-1 do
write(' ');
for j:=1 to (n-i+1)*2-1 do{打印每行的星号,个数是所在行*2-1}
write('*');
writeln;
end;
else writeln;
end;
end.
十、钞票换硬币(穷举法)
【题目】把一元钞票换成一分、二分、五分硬币(每种至少一枚),有哪些种换法?
【答案】461种
【参考程序】
var i,j,k,total:integer;
begin
total:=0; {总数设为0}
for i:=1 to 99 do {i:二分硬币最多99枚}
for j:=1 to 49 do {j:二分硬币最多49枚}
for k:=1 to 19 do {k:五分硬币最多19枚}
if then begin
writeln(i:3,j:3,k:3);
; {总数加1}
end;
writeln(total);
readln;
end.
【百钱买百鸡】一只公鸡值5元,一只母鸡值 3元,3只小鸡值1元,现用一百元要买一百只鸡,问有
什么方案?


电子护照-经典脑筋急转弯


7月节日-月之恋


唐山二中-爱岗敬业心得体会


国立台湾大学-检查书


珠海招生网-五年级数学题


环保作文500字-八年级英语工作总结


大禹治水读后感-家园共育


英国留学热门专业-家长评语和期望