begin
t:
=a[i];a[i]:
=a[j];a[j]:
=t;
end;
write(a[1],a[20]);
end.
Vari,n,y,max,min:
integer;
Begin
Readln(n);
Max:
=n;min:
=n;
Fori:
=1to20do
Begin
Readln(y);
Ify>maxthenmax:
=y;
Ify=y;
End;
Write(max,min);
End.
4.求1+1/2+1/3+1/4.......+1/100的和!
!
!
==============for循环版本==================
vari:
integer;
d:
double;
begin
d:
=0;
fori:
=1to100do
begin
d:
=d+1/i;
write(d,'');
end;
end.
==============while循环版本==================
vari:
integer;
d:
double;
begin
d:
=0;i:
=0;
whilei<100do
begin
inc(i);
d:
=d+1/i;
write(d,'');
end;
end.
==============repeat循环版本==================
vari:
integer;
d:
double;
begin
d:
=0;i:
=0;
repeat
inc(i);
d:
=d+1/i;
write(d,'');
untili>100;
end.
==========================================
如果是只输出一个结果把write语句放到最后一个end前即可
5.输入30个学生成绩,分别统计成绩在85—100分,60—85分,60分以下,各分数段中的人数
programchengji;
VARq,w,e,a,i:
integer;
begin
q:
=0;
w:
=0;
e:
=0;
fori:
=1to10do
begin
readln(a);
ifa>85thenq:
=q+1
elseifa>60thenw:
=w+1
elseifa<60thene:
=e+1;
end;
writeln('85-100:
',q:
5,'60-85:
',w:
5,'0-60:
',e:
5);
readln;
end.
6.输入任一的自然数A,B,求A,B的最小公倍数
programExam39;
vara,b,d,t:
word;
begin
write('inputa,b:
');readln(a,b);
ifabegin
t:
=a;a:
=b;b:
=t
end;
d:
=a;
whiledmodb<>0do
{当条件为真时就做do后面的语句}
inc(d,a);//把大数进行翻倍,直到能被两个数整除.
writeln('[',a,',',b,']=',d);
readln
End.
7.找出被2、3、5除时余数为1的最小的十个数
Vars,i:
integer;
Begin
S:
=1;
Repeat
Inc(s);
If(smod2=1)and(smod3=1)and(smod5=1)then
Beign
Write(s);
Inc(i);
Ifi=10thenbreak;
End;
Untili=10;
End.
8.把一张一元钞票换成一分,二分和五分的硬币,每种至少一枚。
问有哪几种换法?
var
max,i,j,k:
longint;
begin
fori:
=1to20do
forj:
=1to50do
if100-5*i-2*j>0then
begin
inc(max);
writeln('1:
',100-5*i-2*j,'2:
',j,'5:
',i);
end;
writeln('total:
',max);
end.
问的是每种至少1枚吧。
。
。
共461种
8-1.某人想将手中的一张面值100元的人民币换成10元、5元、2元和1元面值的票子。
要求换正好40
张,且每种票子至少一张。
问:
有几种换法?
应适当考虑减少重复次数。
Vari,j,k,max:
integer;
Begin
Fori:
=1to10do
Forj:
=1to20do
Fork:
=1to50do
If100-10*i-5*j-2*k>0then
Inc(max);
write(max);
End.
9.输入一列图形(字母金字塔)
var
i,a,s,k:
longint;
begin
fori:
=65to90do begin
a:
=65;
k:
=k+1;
fors:
=1to26-kdowrite('');
fors:
=1tokdobeginwrite(chr(a));a:
=a+1;end;a:
=a-1;
fors:
=1tok-1dobegina:
=a-1;write(chr(a));end;
writeln;
end;
end.
a
ab
abc
..
abc……yz
vari,j:
char;
begin
fori:
=’a’to‘z’do
begin
forj:
=’a’toidowrite(j,’’);
writeln;//换行
end;
end.
10、验证哥德巴赫猜想(任何充分大的偶数都可由两个素数之和表示)。
将4-100中的所有偶数分别用两个素数之和表示。
输出为:
4=2+2
6=3+3
8=3+5
.
.
.
100=3+97
programex4_10;
var
n,p,q,i,j:
integer;
flagp,flagq:
boolean;
begin
fori:
=2to50do
begin
n:
=2*i;
p:
=1;
repeat
p:
=p+1;
q:
=n-q;
{p是素数吗?
}
flagp:
=true;
forj:
=2totrunc(sqrt(p))do
ifpmodj=0
thenflagp:
=false;
{q是素数吗?
}
flagq:
=true;
forj:
=2totrunc(sqrt(q))do
ifqmodj=0
thenflagq:
=false;
untilflagpandflagq;
{输出结果}
writeln(n,'=',p,'+',q);
end;
end.
11.打印数字金字塔。
programex4_9;
var
i,j:
integer;
begin
fori:
=1to9do
begin
{留空}
write('':
40-2*i);
{打印左半边三角形,从1到i}
forj:
=1toido
write(j:
2);
{打印右半边三角形,从i-1到1}
forj:
=i-1downto1do
write(j);
{换行}
writeln;
end;
end.
例12、百钱买百鸡问题:
用一百元钱买一百只鸡,其中公鸡5元一只,母鸡3元一只,小鸡1元两只,输出每种买法。
算法1利用循环进行枚举各种买法,找符合题意的解,设公鸡x只,母鸡y只,小鸡z只:
Forx:
=0to100do
fory:
=0to100do
forz:
=0to100do
if(x+y+z=100)and(5*x+3*y+0.5*z=100)
thenwriteln(x:
4,y:
4,z:
4);
此程序循环了101^3次,有多余的循环,可以优化掉。
算法2z取值范围可以缩小为100-x-y:
Forx:
=0to100do
fory:
=0to100do
begin
z:
=100-x-y;
if(z>=0)and(5*x+3*y+0.5*z=100)
thenwriteln(x:
4,y:
4,z:
4);
end;
此程序循环了101^2次,还可以继续优化x和y的范围。
算法3100元最多可买20只公鸡,33只母鸡,所以循环可以再减少
Forx:
=0to20do
fory:
=0to33do
begin
z:
=100-x-y;
if(z>=0)and(5*x+3*y+0.5*z=100)
thenwriteln(x:
4,y:
4,z:
4);
end;
此程序循环了21*34次,还可以再优化。
算法4买了x只公鸡后,剩下的钱不可能再买33只母鸡,所以循环可以再减少:
Forx:
=0to20do
fory:
=0to((100-x*5)div3)do
forz:
=0to100do
begin
z:
=100-x-y;
if(z>=0)and(5*x+3*y+0.5*z=100)
thenwriteln(x:
4,y:
4,z:
4);
end;
此时要注意虽然减少了循环次数,但增加了乘、减和除的运算。
要两者权衡判断优劣。
13.编写一程序,验证角谷猜想。
所谓的角谷猜想是:
“对于任意大于1的自然数n,若n为奇数,则将n
变为3*n+1,否则将n变为n的一半。
经过若干次这样的变换,一定会使n变为1。
”
programjg;
var
n,t:
longint;
begin
t:
=0;
readln(n);
repeat
ifodd(n)thenn:
=n*3+1elsen:
=ndiv2;
t:
=t+1;
writeln(n);
untiln=1;
writeln(t);
end.