模拟多重循环

阅读(1354) 标签: 多重循环, 判断, for, func,

l  问题

请编写程序解答下面10个问题:

1、第一个答案是b的问题是哪一个?

a2;(b 3;(c4;(d5;(e6

2、唯一的连续两个具有相同答案的问题是:

a23;(b34;(c45;(d56;(e67

3、本问题答案和哪一个问题的答案相同?

a1;(b2;(c4;(d7;(e6

4、答案是a的问题的个数是:

a0;(b1;(c2;(d3;(e4

5、本问题答案和哪一个问题的答案相同?

a10;(b9;(c8;(d7;(e6

6、答案是a的问题的个数和答案是什么的问题的个数相同?

ab;(bc;(cd;(de;(e)以上都不是

7、按照字母顺序,本问题的答案和下一个问题的答案相差几个字母?

a4;(b3;(c2;(d1;(e0。(注:ab相差一个字母)

8、答案是元音字母的问题的个数是:

a2;(b3;(c4;(d5;(e6。(注:ae是元音字母)

9、答案是辅音字母的问题的个数是:

a)一个质数;(b)一个阶乘数;(c)一个平方数;(d)一个立方数;(e5的倍数

10、本问题的答案是:

aa;(bb;(cc;(dd;(ee

l  思路

大致思路:将问题中的a,b,c,d,e选项分别记录为12,3,4,5,这样便于答案计增。首先把所有问题答案置0,然后按顺序依次给每一个问题答案加1,再通过题目中要求对各个答案进行判断,如果答案不符合某个题目的要求,则答案再加1,直到符合为止。如果5个答案全部设置了一遍,仍然没有合适的答案,则返回去重新设置上一题的答案。遇到答案为0的题目直接跳过不做判断。

1.  初始化10个问题答案为0,问题序号为1

2.  从第一个问题开始循环,首先把问题答案加1,判断本题答案是否为6,如果为6,说明已经超出5个答案了,则把本题答案置0i-1,重新回到上一题开始循环。

3.  接着调用子函数判断所有问题答案是否合理,如果不合理则继续下一个循环

4.  如果合理,则i+1,然后判断i是否等于11,如果等于11,说明10个问题设置完毕,因此把最终答案转为字符串存起来,并把i置为i-1回到上一题继续循环,看看还有没有别的符合条件的答案,直到i等于1结束循环。

5.  子函数逐题判断答案是否合理,判断顺序是先看本题或相关问题是否为0,如果为0表明还没有设置答案,跳过判断;不为0,则根据本题的题意进行判断。

l  代码

 

A

B

C

D

 

1

=[0]*10

>i=1

 

 

A1用来存储10个问题的答案,初值为0i为问题序号

2

for i>0

>A1(i)=A1(i)+1

 

 

将问题答案加1

3

 

if A1(i)==6

>A1(i)=0,i=i-1

next

如果答案已经设置到了最后一个选项仍旧不对,则将当前问题答案置0,返回上一问题,将上一问题答案加1重新循环

4

 

if !func(A8)

next

 

调用函数,判断此次设置的答案是否合理,不合理的话进入下一次循环,继续把答案加1

5

 

>i=i+1

 

 

如果题目的答案设置合理,设置下一题的答案

6

 

if i==11

=C6|A1.(char(asc("a")+~-1)).concat()

>i=i-1

如果最后一题设完答案都合理,则把答案转为字母存到C6,将i的值设置为i-1,回到上一题看看还有没有别的符合要求的答案,直到i等于1为止,结束循环

7

 

 

 

 

 

8

func

if A1(1)!=0

 

 

判断是否给第一题设置了答案

9

 

 

=A1(A1(1)+1)

 

按照第一题的答案,找到第一个答案为b的题目答案

10

 

 

if C9!=0 && C9!=2 || A1(to(A1(1))).pos(2)>0

return false

如果C9中找到的题目设置的答案不是b或者在这个题目之前已经有一个题目的答案是b了,那么就返回false

11

 

if A1(2)!=0

=A1(2)+1

 

按照第二题的答案,找到唯一的连续两个具有相同答案的问题序号

12

 

 

if A1(C11)*A1(C11+1)>0 && A1(C11)!=A1(C11+1)

return false

如果C11中找到的题目设置的答案和相连的下一题的答案不相同,返回false

13

 

 

if A1.pselect(~>0 && ~==~[1] && #!=C11)>0

return false

如果存在另外两个题目的答案相同,说明C11不是唯一的,返回false

14

 

if A1(3)!=0

=A1([1,2,4,7,6](A1(3)))

 

按照第三题的答案,找到答案和第三题答案相同的问题答案

15

 

 

if C14!=0 && C14!=A1(3)

return false

如果C14不为0并且与第三题的答案不相同,返回false

16

 

=A1.count(~==0)

=A1.count(~==1)

 

B16计算出还没有设置答案的题目的个数

C16计算出答案为a的题目的个数

17

 

if A1(4)!=0

=C16-A1(4)+1

 

C16减去第四题的答案,因为答案序号和答案值差1,所以加1

18

 

 

if C17>0 || C17<0 && B16==0

return false

如果C17计算的结果大于0,即设置的答案中为a的个数已经大于第四题中选择的个数,或者当题目全部设置了答案,但是C17仍然小于0,即第四题中设置的所有题目中答案为a的个数大于实际答案为a的个数,返回false

19

 

if A1(5)!=0

=A1([10,9,8,7,6](A1(5)))

 

按照第五题的答案,找到答案和第五题答案相同的问题答案

20

 

 

if C19!=0 && C19!=A1(5)

return false

如果C19不为0且与第五题的答案不相同,返回false

21

 

if B16==0

=A1.align@a([2,3,4,5]).(~.len())

 

C21计算答案分别为2345的问题个数

22

 

 

if !((A1(6)!=5 && C21(A1(6))==C16) || (A1(6)==5 && C21.pos(C16)== null))

return false

如果第六题的答案为5且答案为a的个数和C21的所有问题个数都不同,则返回true;如果第六题答案不为5且其答案对应的问题个数和C21中的相符,则返回true;其它情况返回false

23

 

if A1(7)!=0

if A1(8)!=0 && abs(A1(8)-A1(7))!=5-A1(7)

return false

如果第八题已经设置了答案,并且第八题和第七题的答案相差的字母个数和第七题选择的答案不一致,返回false

24

 

if A1(8)!=0

=C16+A1.count(~==5)-A1(8)-1

 

计算出答案为ae的问题数之和与第八题答案的差

25

 

 

if C24>0 || C24<0 && B16==0

return false

如果C24中计算的结果大于0,即已有的元音字母的答案比第八题选择的个数多,或者当所有问题都设置了答案,但C24小于0,即所有的问题都设置了答案但是元音字母的答案仍然比第八题选择的个数少,则返回false

26

 

if B16==0

[[2,3,5,7],[1,2,6],[0,1,4,9],[0,8],[0,5,10]]

 

C26单元格定义了第九题各个选项可能的问题个数

27

 

 

if C26(A1(9)).pos(A1.count(~>=2 && ~<=4))== null

return false

如果计算出辅音字母的个数不在C26的序列中,则返回false

28

 

return true

 

 

A1用来存储10个问题的答案,初值为0i为问题序号

 

l  结果