主题:这副牌我怎么老玩不好啊???
chenzhong
[专家分:250] 发布于 2005-08-17 20:56:00
有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个回复)
沙发
jzyray [专家分:20610] 发布于 2005-08-17 21:35:00
我没看题目,单看你的程序:
while k<=52 do
k:=1;
是个死循环。
板凳
yukangcool [专家分:460] 发布于 2005-08-17 21:40:00
能把错在几排,是什么第几号原因写出来吗?
3 楼
chenzhong [专家分:250] 发布于 2005-08-17 22:55:00
既然是个死循环,那大哥能不能告诉我怎么改啊?[em18]
4 楼
chenzhong [专家分:250] 发布于 2005-08-17 23:04:00
我改了一下,结果是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 楼
stuart920106 [专家分:730] 发布于 2005-08-18 17:41:00
的确是个死循环,可我感觉你这个算法就有问题
6 楼
口口and枕头 [专家分:1550] 发布于 2005-08-18 18:50:00
错误太多了~
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 楼
口口and枕头 [专家分:1550] 发布于 2005-08-18 19:00:00
刚刚我有修改哟~~~看了吗~看了不要忘了加分哟~~
8 楼
chenzhong [专家分:250] 发布于 2005-08-18 20:40:00
数组怎么初始化?[em18]
不好意思,麻烦把改好的程序写出来[em12]
9 楼
stuart920106 [专家分:730] 发布于 2005-08-18 21:15:00
to 楼上:
初始化:a=0;
10 楼
口口and枕头 [专家分:1550] 发布于 2005-08-18 21:55:00
就是用for 语句来为数组赋值
比如
for i:=1 to max do
a[i]:=0{这个值由题意定}
我来回复