回 帖 发 新 帖 刷新版面

主题:这副牌我怎么老玩不好啊???

有52张扑克牌,使它们全部下面朝上。从第2张牌开始,把凡是2的倍数位置上的牌翻成下面朝下,接着从第3张牌开始,把凡是3的倍数位置上的牌下面朝上的番成下面朝下,正面朝下的翻成正面朝上,接着从第4张牌开始,把凡是4的倍数位置上的牌按此规律翻转。依此类推,直到第2张要翻的牌是第52张牌为止。统计最后有几张牌正面朝上,并打印出它们的位置。

本人已给出了一个程序,可老是运行不起来,怎么回事啊!!
program p1;
var
a:array[1..52] of integer;
i,k:integer;
begin
for i:=1 to 52 do
while k<=52 do
  k:=1;
  a[i]:=1;
if k mod i=0 then
  a[i]:=a[i]*-1
else a[i]:=a[i]*1;
  k:=k+1;
end;
if a[i]=1 then
writeln(i)
end.

回复列表 (共11个回复)

沙发

我没看题目,单看你的程序:

while k<=52 do
k:=1;

是个死循环。

板凳

能把错在几排,是什么第几号原因写出来吗?

3 楼

既然是个死循环,那大哥能不能告诉我怎么改啊?[em18]

4 楼

我改了一下,结果是52,不知对不对[em18]
program p1;
var
a:array[1..52] of integer;
i,k:integer;
begin
for i:=1 to 52 do
for k:=1 to 51 do
  a[i]:=1;
if k mod i=0 then
  a[i]:=a[i]*-1
else a[i]:=a[i]*1;
k:=k+1;
if a[i]=1 then
writeln(i)
end.

5 楼

的确是个死循环,可我感觉你这个算法就有问题

6 楼

错误太多了~

program p1;
var
a:array[1..52] of integer;
i,k:integer;
begin//数组没有初始化
for i:=1 to 52 do//看到这两个条件了吗?直到第2张要翻的牌是第52张牌为止/从2的倍数开始/也就是说就是i应该从2 to 26
while k<=52 do//这句之前K没有初始化值,这个循环不会被执行,这个循环包函了那几个语句,要用BEGIN,END括起来呀~
  k:=1;
  a[i]:=1;
if k mod i=0 then//是从2的倍数开始~你从1的倍数开始~汗!
  a[i]:=a[i]*-1
else a[i]:=a[i]*1;//这句完全可以不要,多做个乘法来拖时间吗?
  k:=k+1;
end;
if a[i]=1 then
writeln(i)
end.

7 楼

刚刚我有修改哟~~~看了吗~看了不要忘了加分哟~~

8 楼

数组怎么初始化?[em18]
不好意思,麻烦把改好的程序写出来[em12]

9 楼

to 楼上:
初始化:a=0;

10 楼

就是用for 语句来为数组赋值
比如
for i:=1 to max do
a[i]:=0{这个值由题意定}

我来回复

您尚未登录,请登录后再回复。点此登录或注册