主题:[讨论]简单数组题,分
编程小菜菜
[专家分:90] 发布于 2007-07-30 18:46:00
有100个同学排成一列纵队,他们从1到12报数,报到12的出列。如果
报到队尾不到12人,则接着从队头开始。求经过3次从队头到队尾的
报数后,队伍中按顺序还剩下哪些人?输出起原来在队伍中的顺序。
我老师提示我:先设100个,初值都为1,然后每个数加本身,报12的为0.差不多这样.
我要知道怎么编....
50分...
回复列表 (共9个回复)
沙发
Matodied [专家分:7560] 发布于 2007-07-30 21:07:00
就是这样编的。
用BOOLEAN数组更好,a[i] = TRUE表示i号还在,= FALSE表示已经出列了。
但是要记住从第2次开始必须数到12个TRUE才可以。
板凳
Matodied [专家分:7560] 发布于 2007-07-30 21:16:00
程序:
TYPE arr = ARRAY[1..100] OF BOOLEAN;
VAR
a: arr; i, j, k: INTEGER;
BEGIN
FOR i:=1 TO 100 DO a[i] := TRUE;
FOR i:=1 TO 3 DO BEGIN
j := 0;
REPEAT
k := 0;
REPEAT
j := j + 1;
IF a[j] THEN k := k + 1;
UNTIL (k = 12) OR (j = 100);
IF k = 12 THEN BEGIN
a[j] := FALSE; k := 0;
END;
UNTIL j = 100;
END;
FOR i:=1 TO 100 DO BEGIN
IF a[i] THEN WRITE(i, ' ');
END;
END.
3 楼
编程小菜菜 [专家分:90] 发布于 2007-07-30 21:32:00
不对吧?
报到12的要闪人,超过100要减;
9*12=108,也就是第8号报了12,但程序结果有8啊!
4 楼
Matodied [专家分:7560] 发布于 2007-07-30 21:40:00
你的题目明明要求报到队尾没到12就要从头开始的。
现在你又改变主意了是不是?
5 楼
编程小菜菜 [专家分:90] 发布于 2007-07-30 21:43:00
'报到12的出列。如果
报到队尾不到12人,则接着从队头开始。'
我是说'接着'!
呵呵..
6 楼
Matodied [专家分:7560] 发布于 2007-07-30 21:55:00
那程序改一下就行了。
TYPE arr = ARRAY[1..100] OF BOOLEAN;
VAR
a: arr; i, j, k: INTEGER;
BEGIN
FOR i:=1 TO 100 DO a[i] := TRUE;
j := 0; i := 0;
REPEAT
k := 0;
REPEAT
j := j + 1;
IF j > 100 THEN BEGIN j := 1; i := i + 1; END;
IF i > 3 THEN BREAK;
IF a[j] THEN k := k + 1;
UNTIL k = 12;
IF k = 12 THEN a[j] := FALSE;
UNTIL i > 3;
FOR i:=1 TO 100 DO BEGIN
IF a[i] THEN WRITE(i, ' ');
END;
END.
7 楼
编程小菜菜 [专家分:90] 发布于 2007-07-30 21:58:00
帅!
8 楼
编程小菜菜 [专家分:90] 发布于 2007-07-30 21:58:00
谢谢了!
我还有个题,就发,你帮我看看.
谁叫我菜!
9 楼
abcwuhang [专家分:1840] 发布于 2007-07-30 22:02:00
!几天不见Matodied的分就翻倍了!真惊讶!!!!!!!!!!!!!!!!1
我来回复