Программа должна определить, какие сочетания карт дают в сумме вес 21 - Free Pascal
Формулировка задачи:
4. Есть такая тюремная игра. «Двадцать одно» называется. Каждая карта в этой игре имеет свой вес. Карты без картинок начинаются с «шестерки» и имеют вес, соответствующий номеру. Например, «де-вятка» имеет вес 9. Карты с картинками имеют такие веса. «Валет» - 2, «Дама» - 3, «Король» - 4. «Туз» весит 11. Пусть в колоде только одна масть. Программа должна определить, какие сочетания карт дают в сумме вес 21.
Решение задачи: «Программа должна определить, какие сочетания карт дают в сумме вес 21»
textual
Листинг программы
program TwentyOne;
type
TWeight = array[0..8] of integer;
const
CardWeight: TWeight = (6, 7, 8, 9, 10, 2, 3, 4, 11);
type
TCardName = array[0..8] of string;
const
CardName: TCardName = ('"6"', '"7"', '"8"', '"9"', '"10"', '"Jack"',
'"Queen"', '"King"', '"Ace"');
var
Combination, Mask: word;
Sum, i: integer;
begin
for Combination := 0 to (1 shl 9) - 1 do
begin
Sum := 0;
Mask := 1;
for i := 0 to 8 do
begin
if Mask and Combination <> 0 then
Sum := Sum + CardWeight[i];
Mask := Mask shl 1;
end;
if Sum = 21 then
begin
Mask := 1;
for i := 0 to 8 do
begin
if Mask and Combination <> 0 then
Write(' ', CardName[i]);
Mask := Mask shl 1;
end;
writeln;
end;
end;
end.
Объяснение кода листинга программы
- Объявлены две константы:
CardWeightиCardName.CardWeightсодержит веса карт в виде массива целых чисел, аCardNameсодержит названия карт в виде массива строк. - Объявлены следующие переменные:
Combination,Mask,Sumиi.CombinationиMaskявляются словарными переменными, аSumиi- целочисленными. - Запускается цикл, который перебирает все возможные комбинации карт (от 0 до 2^9-1), начиная с 0.
- Для каждой комбинации в цикле начинается новый цикл, который перебирает все карты (от 0 до 8). Если соответствующая карта присутствует в комбинации (маска карты не равна 0), то ее вес добавляется к сумме.
- После завершения второго цикла проверяется, равна ли сумма 21. Если да, то выводится название каждой карты, входящей в комбинацию.
- Если сумма не равна 21, то цикл продолжается со следующей комбинацией.