1. 将100圆兑换为20, 10, 5, 2, 1,五种不同面额的纸币,输出每种换法,最后输出换法总数。
program exExhaustive1_1;
const All = 100;
var
twenty, ten, five, two, num : integer;
begin
for twenty := 1 to All div 20 do
for ten := 1 to (All - twenty * 20) div 10 do
for five := 1 to (All - twenty * 20 - ten * 10) div 5 do
for two := 1 to (All - twenty * 20 - ten * 10 - five * 5) div 2 do
if (All - twenty * 20 - ten * 10 - five * 5 - two * 2) <> 0 then
begin
writeln(All, ' = ', twenty, 'x20+', ten, 'x10+', five, 'x5+', two, 'x2+', (All - twenty*20 - ten*10 - five*5 - two*2), 'x1');
num := num+1;
end;
writeln('There are ', num, ' kinds.');
readln;
end.
const All = 100;
var
twenty, ten, five, two, num : integer;
begin
for twenty := 1 to All div 20 do
for ten := 1 to (All - twenty * 20) div 10 do
for five := 1 to (All - twenty * 20 - ten * 10) div 5 do
for two := 1 to (All - twenty * 20 - ten * 10 - five * 5) div 2 do
if (All - twenty * 20 - ten * 10 - five * 5 - two * 2) <> 0 then
begin
writeln(All, ' = ', twenty, 'x20+', ten, 'x10+', five, 'x5+', two, 'x2+', (All - twenty*20 - ten*10 - five*5 - two*2), 'x1');
num := num+1;
end;
writeln('There are ', num, ' kinds.');
readln;
end.
2. 韩信点兵又称为中国剩余定理:相传汉高祖刘邦问大将军韩信统御兵士多少,韩信答说,每3人一列余1人、5人一列余2人、7人一列余4人、13人一列余6人……。刘邦茫然而不知其数。
program exExhaustive2_1;
const Maxnum = 100;
var
remainder3, remainder5, remainder7, num : integer;
begin
write('Please input 3 remainders (by 3, 5, 7): ');
readln(remainder3, remainder5, remainder7);
num := remainder7;
while num <= Maxnum do
begin
if (num mod 3 = remainder3) and (num mod 5 = remainder5) then writeln('The number maybe is ', num);
num := num+7;
end;
readln;
end.
const Maxnum = 100;
var
remainder3, remainder5, remainder7, num : integer;
begin
write('Please input 3 remainders (by 3, 5, 7): ');
readln(remainder3, remainder5, remainder7);
num := remainder7;
while num <= Maxnum do
begin
if (num mod 3 = remainder3) and (num mod 5 = remainder5) then writeln('The number maybe is ', num);
num := num+7;
end;
readln;
end.
3. 求 2 - 200内的所有素数,每行输出10个。
program exExhaustive3_1;
const e = 200;
var
i, j, k, sq : integer;
begin
write(' 2 3 ');
k := 2;
i := 5;
while i <= e do
begin
sq := trunc(sqrt(i));
for j := 3 to sq do
if i mod j = 0 then
break;
if i mod j <> 0 then
begin
write(i : 4, ' ');
k := k+1;
if k mod 10 = 0 then writeln;
end;
i := i+2;
end;
writeln;
writeln('There are ', k, ' primes.');
readln;
end.
const e = 200;
var
i, j, k, sq : integer;
begin
write(' 2 3 ');
k := 2;
i := 5;
while i <= e do
begin
sq := trunc(sqrt(i));
for j := 3 to sq do
if i mod j = 0 then
break;
if i mod j <> 0 then
begin
write(i : 4, ' ');
k := k+1;
if k mod 10 = 0 then writeln;
end;
i := i+2;
end;
writeln;
writeln('There are ', k, ' primes.');
readln;
end.
4. 对于一个100以内的素数(也称质数),把它的十位数字与个位数字对换之后,若得到的新整数仍为素数,则称原来的那个素数为“绝对素数”。例如11、13对换后为11、31仍是素数,它们就是绝对素数。要求编程求出100以内所有“绝对素数”。
program exExhaustive4_1;
var
gw, sw, i, num, sq : integer;
begin
sw := 1;
while sw <= 9 do
begin
gw := 1;
while gw <= sw do
begin
num := sw*10+gw;
sq := trunc(sqrt(num));
for i := 3 to sq do
if (num mod i = 0) or ((gw*10+sw) mod i = 0) then break;
if (num mod i <> 0) and ((gw*10+sw) mod i <> 0) then
writeln(num, ' ', gw*10+sw);
gw := gw+2;
end;
sw := sw+2;
end;
readln;
end.
var
gw, sw, i, num, sq : integer;
begin
sw := 1;
while sw <= 9 do
begin
gw := 1;
while gw <= sw do
begin
num := sw*10+gw;
sq := trunc(sqrt(num));
for i := 3 to sq do
if (num mod i = 0) or ((gw*10+sw) mod i = 0) then break;
if (num mod i <> 0) and ((gw*10+sw) mod i <> 0) then
writeln(num, ' ', gw*10+sw);
gw := gw+2;
end;
sw := sw+2;
end;
readln;
end.