|
|
#8
风吹过b2010-01-14 21:18
我只会VB6,所以看到这个题目,就用VB6做了一下.
我的VB6的代码如下,然后那位牛人随手改成 C 的代码.
我加了大量的注释在内.VB6 的注释是 ' 开头,到本行结尾为止.
可以占一行,也可以从代码本行里 再接注释
VB6运行中文名当函数和变量名,所以里面一些函数名和变量名都是中文的.
----------------VB6代码---------------------
Private Sub Command1_Click()
'响应按钮处理的过程
Dim n As Long
Dim s As String
'输入部分,要求输入一个5-20的数,超范围则退出过程
s = InputBox("请输入 N : 5-20", 5)
If IsNumeric(s) Then
n = CLng(s)
If n < 5 And n > 20 Then
MsgBox "数据范围不对"
Exit Sub
End If
Else
MsgBox "请输入数据"
Exit Sub
End If
'处理部分
Dim i As Long
Dim j As Long
Dim k As String
'FOR 循环 ,N 为总层数
For i = 1 To n
Select Case i '多分支选择
Case 1, n '第一层,最后一层
k = 重复字串("X ", n) '全成 X
Case 2, n - 1 '第二层及倒数第二层,由头,尾(均为 X ) 和中间(Y)组成
k = "X " & 重复字串("Y ", n - 2) & "X "
Case Else '其它层,由 头 和 内层数字 和 尾 组成
k = "X Y " & 产生内套字串(i, n) & "Y X "
End Select
Print k '输出一行
Next i
End Sub
Private Function 重复字串(字串 As String, 次数 As Long) As String
'根据传进来的参数,使用FOR循环重次连接成一个新的字符串
'如果换到C里面的话,应该是先申请内存,然后用 FOR 循环填数字进去
Dim i As Long
For i = 1 To 次数
重复字串 = 重复字串 & 字串
Next i
End Function
Private Function 产生内套字串(当前层数 As Long, 总层数 As Long) As String
Dim i As Long
Dim j As Long
Dim k1 As String, k2 As String
'如果传进去的当前层数大于半数,则需要修正为从底部计算起的层数
If 当前层数 < 总层数 / 2 + 1 Then
j = 当前层数
Else
j = 总层数 - 当前层数 + 1
End If
'使用FOR 产生头和层部分
'如果是C里面,可以申请内存,然后从头和从尾填数字进去
For i = 0 To j - 4
k1 = k1 & i & " "
k2 = i & " " & k2
Next i
'产生中间部分的字串,然后与头和层拼起来
'中间层个数的计算是 头,尾各用掉了 j-3),还有去掉2个 X Y 层, 就变成了
'总个数- XY层个数-头-尾
'最后连接起来
产生内套字串 = k1 & 重复字串(CStr(j - 3) & " ", 总层数 - 4 - (j - 3) * 2) & k2
End Function
|