试题

试题 试卷

logo

题型:综合题 题类:真题 难易度:困难

浙江省2018年4月普通高校招生选考信息技术考试试卷

【加试题】为分析数组a中各元素依次变化的情况,进行如下定义:

●变化段:数组中相邻两个元素构成一个变化段。变化段有上升段(a(i)>a(i-1))、下降段(a(i)<a(i-1))和持平段(a(i)=a(i-1))。数组a中的n个元素可构成n-1个依次排列的变化段。

●波峰:从上升段转到下降段形成一个波峰。波峰的起点是峰顶前所有连续上升段中的第1个,终点是峰顶后所有连续下降段中的最后1个。

●对称波峰:上升段与下降段个数相同的波峰称为对称波峰。

  下图为一组数据的变化段及波峰示意图。

现要求统计数组a各元素依次变化过程中“对称波峰”的个数。小李依据上述描述设计了如下VB程序。请回答下列问题:

(1)、数组元素“1,4,3,3,2,6,8,7,9,3,4,7,9,6,3,1”依次变化过程中“对称波峰”的个数为

(2)、请在画线处填入合适的代码。

Const n=20

Dim a(1 To n)As Integer

Private Sub FormLoad()

    ‘读取数据,并存储到数组a中。代码略

End Sub

Private Sub Command1_Click()

    Dim flag As Integer   ‘存储变化段的状态:1表示升;-1表示降;0表示平

    Dim count As Integer    ‘存储对称波峰的个数

    Dim steps As Integer

    Dim i As Integer

    flag=0:steps=0:count=0

    For i=    ①   To n

      If a(i)>a(i-1)Then

        If IsSymPeak(flag,steps)Then count count+1

      If flag=0 Or flag=-1 Then

    ②  

      Else

         steps=steps+1

      End If

      flag=1

    EIself a(i)=a(i-1)Then

      If IsSymPeak(flag,steps)Then count=count+1

      steps=0

      flag=0

    Else

      steps=steps-1

      flag=-1

    End If

  Next i

  If IsSymPeak(flag,steps)Then count=count+1

  Text1.Text=Str(count)

End Sub

Function IsSymPeak(flag As Integer,steps As Integer)As Boolean

    If    ③    Then

       IsSymPeak=True

    Else

       IsSymPeak=False

    End If

End Function

 ② ③ 

举一反三
有N堆纸牌,编号分别为①,②,…。每堆上有若干张,但纸牌总数必为N的倍数。可以在任一堆上取若干张纸牌,然后移动。

移牌规则:在编号为①的堆上取的纸牌,只能移到编号为②的堆上;在编号为N(N≥2)的堆上取的纸牌,只能移到编号为N-1的堆上;其他堆上取的纸牌,可以移到相邻左边或右边的堆上。

现在要求找出一种移动方法,用最少的移动次数使每堆上纸牌数都一样多。

例如N=4,4堆纸牌数分别为:

9

8

17

6

移动3次可达到目的:从③取4张牌放到④(9 8 13 10)→从③取3张牌放到②(9 11 10 10)→从②取1张牌放到①(10 10 10 10)。

现编写如下代码解决4堆任意张数牌的移动问题,请按提示补充划线句的代码:

Private Sub Command1_Click()

Dim aver As Single

Dim st As Integer     ‘统计移动的步数

Dim ssum, i, j As Integer

Dim a( 1 To 100) As Integer

a(1) = Val(Text1.Text)     ‘读取各堆牌张数,求总张数aver

a(2) = Val(Text2.Text)

a(3) = Val(Text3.Text)

a(4) = Val(Text4.Text)

ssum =a(1) + a(2) + a(3) + a(4)

aver=ssum \ 4     ‘求牌的平均张数aver

For i=1 To 4

  ① 

Next i

i=1     ‘过滤初端和末端的0

j = 4

Do While a(i) = 0 And i < 4

 i=i+1

Loop

Do While a(j) = 0 And j > 1

 j = j-1

Loop

st = 0

Do While i < j      ‘开始移动牌使数组a元素值均为0并过滤掉

  ② 

 a(i) = 0

 st = st + 1

 i=i+1

 Do While a(i) = 0 And i<j      ‘过滤掉数组a元素值均为0

   ③ 

 Loop

Loop

Print st      ‘输出移动次数

End Sub

返回首页

试题篮