我正试图在picaxe上做一个yahtzee得分手,这一切都没关系,因为有这么多不同的组合。如果有一种方法可以测试我的5个变量中的4个是否相同(不多也不少)而不必经历所有不同的组合,我会徘徊,例如: 如果b1 = b2且b1 = b3且b1 = b4且b1!= b5则... 如果b1 = b2且b1 = b3且b1 = b5且b1!= b4则...
总之,有一种方法可以看出5个变量中只有4个是相同的。
答案 0 :(得分:0)
因为你告诉我们这是一个Yahtzee得分手,我认为我们需要比较的五个变量代表五个骰子的投掷,因此它们的值只会在1到6之间。
在这种情况下,功能解决方案是计算有多少变量等于测试值,并对1到6之间的测试值重复此操作:
; define symbols for the two variables we will use
symbol same_test = b6
symbol same_count = b7
b1 = 3: b2 = 3: b3 = 3: b4 = 3: b5 = 1 ; test data
gosub test4same
if same_count = 4 then found_4_same ; do something
; else program flow continues here
end
found_4_same:
sertxd("found 4 the same")
end
test4same: ; test if any four of the variables are equal
same_count = 0
for same_test = 1 to 6
if b1 = same_test then gosub found_one
if b2 = same_test then gosub found_one
if b3 = same_test then gosub found_one
if b4 = same_test then gosub found_one
if b5 = same_test then gosub found_one
if same_count = 4 then exit ; 4 variables were equal to same_test
same_count = 0
next
return
found_one:
inc same_count
return
gosub test4same
将检查五个变量b1
到b5
中的四个是否等于相同的数字,对于1到6之间的数字。如果是,则变量{{ 1}}将为4,四个变量等于的数字将在same_count
中。
在将same_test
重置为零之前使用if ... then exit
结构是我能够想到的最有效的方式来判断我们是否发现了四个相同或不同。
两个same_count
语句之后和标签symbol
之前的代码只是为了证明它有效;用你的实际程序替换它。
原则上,您可以在任何值范围内使用相同的技术,但显然如果您需要测试字节变量的所有256个可能值,它会变得有点慢。