Программа должна определить, какие сочетания карт дают в сумме вес 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, то цикл продолжается со следующей комбинацией.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д