回 帖 发 新 帖 刷新版面

主题:[讨论]简单数组题,分

有100个同学排成一列纵队,他们从1到12报数,报到12的出列。如果
报到队尾不到12人,则接着从队头开始。求经过3次从队头到队尾的
报数后,队伍中按顺序还剩下哪些人?输出起原来在队伍中的顺序。


我老师提示我:先设100个,初值都为1,然后每个数加本身,报12的为0.差不多这样.

我要知道怎么编....

50分...

回复列表 (共9个回复)

沙发

就是这样编的。

用BOOLEAN数组更好,a[i] = TRUE表示i号还在,= FALSE表示已经出列了。

但是要记住从第2次开始必须数到12个TRUE才可以。

板凳

程序:
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 楼

不对吧?
报到12的要闪人,超过100要减;
9*12=108,也就是第8号报了12,但程序结果有8啊!

4 楼

你的题目明明要求报到队尾没到12就要从头开始的。

现在你又改变主意了是不是?

5 楼

'报到12的出列。如果
报到队尾不到12人,则接着从队头开始。'

我是说'接着'!
呵呵..

6 楼

那程序改一下就行了。
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 楼

帅!

8 楼

谢谢了!
我还有个题,就发,你帮我看看.
谁叫我菜!

9 楼

!几天不见Matodied的分就翻倍了!真惊讶!!!!!!!!!!!!!!!!1

我来回复

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