小明在玩翻转棋盘的游戏,游戏规则是在一个4×4的棋盘中挑选棋子(棋子只有黑白两面),对于每颗被挑选的棋子,要将该棋子和它在棋盘上的上下左右4个相邻位置上的棋子一起翻转,若某个方向上无棋子,则不作处理,最后使得棋盘纯色(纯白或纯黑)。如图a所示的棋盘,需要选择第2行第2列、第4行第2列两颗棋子,按照规则进行翻转便可使得棋盘变为纯黑。现编写程序找出实现棋盘纯色所需翻转棋子次数最少的方案并输出所挑选棋子的个数,若无答案则输出“无法翻转为纯色”。

每颗棋子的颜色状态可以用0、1来表示,0表示白,1表示黑,顺序为从左至右,从上至下,例如,图a中的棋子初始状态可以表示为1011000111001。
每颗棋子的被选状态也可以用0、1进行标记,0表示不选中,1表示被选中。例如,一个16位的二进制串0000010000000100就表示该棋盘中的第2行第2列、第4行第2列这两个棋子被选中,如果将该二进制串转化为十进制数,即210+22=1028.整张棋盘的所有选棋子方案为0000000000000000-1111111111111111,也就是十进制数0-65535利用枚举算法在0-65535之间枚举,即可找到最优方案。程序运行界面如图b所示,请回答下列问题。
(1)若某方案用十进制表示为137,则该方案总共选择了 33个棋子。
(2)实现上述功能的程序代码如下,请将横线处的代码补充完整。
Dima(1To16)As Integer,b(1To16)As Integer,min_ c As Long’数组a储存棋盘原状态,数组b储存翻转后的棋盘状态
Function check( ) As Boolean'判断棋盘是否纯色
Dim flag As Boolean,i As Integer
flag=True
For i=1 To 15
If b(i)<>b(i+1)Then flag=False
Next i
check=flag
End Function
Private Sub Commandl _Click( )
Dim k As Integer,c As Integer,i As Long,j As Long
min_ c=17
For i=0 T0 2∧16-1
For j=1To16′初始化棋盘
b(j)=a (j)
Next
k=16
c=0
j=i
Do Whilei>0
If ①①Then
b(k)=1-b(k)
If k>4 Then b(k-4)=1-b(k-4
If k<13 Then b(k+4)=1-b(k+4)
Ifk Mod 4<>0 Then b(k+1)=1-b(k+1)
If ②②Then b(k-1)=1-b(k-1)
c+1
End If
j=j\2
k=k-1
Loop
If ③③Then
min _c=c
End If
Next i
If min_ c=17 Then Labell.Caption=“无法翻转为纯色!“Else Label1,Caption=Labell.Caption+Str(min_c)
End Sub
Private Sub Form_ Load( )
′生成棋盘状态,用数组a(1)-a(16)表示,代码略
For i=1 To 16
s=s+Str(a(i))
If i Mod 4=0 Then List1.AddItem s:s=″″
Nexti
End Sub
【考点】编辑事件处理过程的代码.
【答案】3;①;②;③
【解答】
【点评】
声明:本试题解析著作权属菁优网所有,未经书面同意,不得复制发布。
发布:2024/6/27 10:35:59组卷:0引用:1难度:0.3
相似题
-
1.根据AQI值判断城市的空气质量。若城市的AQI值(整数)不超过100则空气质量优良,否则空气质量有污染。当输入的AQI值为-1时则退出程序。不要更改程序结构,将题中的①②③④填入正确的语句。
city=input(“请输入城市名:”)
AQI=int(input(“请输入空气质量指数AQI的值:”))
①______ AQI!=-1:
if ②______:
print(city,“的空气质量优良。”)
③______:
print(city,“的空气质量有污染。”)
city=input(“请输入城市名:”)
AQI=④(input(“请输入空气质量指数AQI的值:”))
(1)序号①答案为
A.if
B.while
C.for
D.def
(2)序号②答案为
A.AQI>=100
B.AQI<=100
C.AQI>100
D.AQI<100
(3)序号③答案为
A.elif
B.break
C.if
D.else
(4)序号④答案为
A.int
B.float
C.str
D.else发布:2025/1/2 11:0:1组卷:0引用:0难度:0.4 -
2.一球从100米高度自由落下,每次落地后反跳回原高度的一半,再下落。编写一个C程序,求它在第10次落地时,其经过了多少米?第10次反弹多高?
发布:2025/1/2 11:0:1组卷:1引用:3难度:0.3 -
3.利用海伦公式求解三角形面积。已知a,b,c为三角形的三条边长,p为三角形的半周长,即p=(a+b+c)/2,计算此三角形面积S的海伦公式为:
。不要更改程序结构,将题中的①②③填入正确的语句。
import math#导入数学模块
def hl(a,b,c):#定义求三角形面积的函数
p=①
s=math.jye.ai(②)#sqrt用于计算算术平方根
return ③#返回面积的值
a,b,c=3,4,5#边长依次赋值
print(“此三角形的面积S为:“,hl(a,b,c))
A. (a+b+c)/2 B.p*(p-a)*(p-b)*(p-c)
C. (a+b+c)*2 D.s
(2)序号②答案为
A.(a+b+c)/2 B.p*(p-a)*(p-b)*(p-c)
C.(a+b+c)*2 D.(3+4+5)/2
(3)序号③答案为
A.p B.s
C.p*(p-a)*(p-b)*(p-c) D.0发布:2025/1/2 11:0:1组卷:0引用:0难度:0.4