一道Free Pascal题目有52张扑克牌,使它们全部正面朝上.从第2张牌开始,凡是2的倍数位置上的牌翻成正面朝下:接着从第3张牌开始,把凡是3的倍数位置上的牌正面朝上的翻成正面朝下,正面朝下的

来源:学生作业帮助网 编辑:作业帮 时间:2024/11/15 20:08:41

一道Free Pascal题目有52张扑克牌,使它们全部正面朝上.从第2张牌开始,凡是2的倍数位置上的牌翻成正面朝下:接着从第3张牌开始,把凡是3的倍数位置上的牌正面朝上的翻成正面朝下,正面朝下的
一道Free Pascal题目
有52张扑克牌,使它们全部正面朝上.从第2张牌开始,凡是2的倍数位置上的牌翻成正面朝下:接着从第3张牌开始,把凡是3的倍数位置上的牌正面朝上的翻成正面朝下,正面朝下的翻成正面朝上:接着从第四张牌开始,把凡是4的倍数位置上的牌按此规律翻转:依此类推,知道第1张要翻的牌是第52张位置.统计最后又几张牌正面朝上,并打印出它们的位置.

一道Free Pascal题目有52张扑克牌,使它们全部正面朝上.从第2张牌开始,凡是2的倍数位置上的牌翻成正面朝下:接着从第3张牌开始,把凡是3的倍数位置上的牌正面朝上的翻成正面朝下,正面朝下的
var
a:array[1..52] of boolean;
i,j,z:longint;
begin
for i:=1 to 52do a[i]:=true; 先假定所有扑克牌都正面朝上.
for i:=2 to 52 do
begin
for j:=i to 52 do 当i升到一定数时,i前的数 mod i 都0 这样可以提高效率.
if j mod i=0 then
begin
if a[j]=true then a[j]:=false else a[j]:=true; 如果正面朝上,则翻成背面;如果背面朝上,则翻成正面.false代表背面.
end;
end;
for i:=1 to 52 do
if a[i]=true then 如果是正面,就进行以下操作.这些就 easy 了.哈
begin
inc(z);write(i,' ');
end;
write ('z=',z);
end.