大小比较排序问题
太原理工大学分数线-青春雷锋
一、大小比较排序问题
例题:读入三个数,输出最大数
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
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
输入
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
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元,现用一百元要买一百只鸡,问有
什么方案?