友情提示:380元/半年,儿童学编程,就上码丁实验室。
VB代码:(2018年8月浙江名校新高考联盟)
17. 【加试题】回文数是从左向右读和从右向左读结果一样的数字串,例如:1 和 363 都是回文数。编写 VB 程序,构造一个大于给定正整n的最小回文数p。构造方法如下:
⑴根据数字串n的左半部分子串st,构造对称的右半部分,生成回文数p;
⑵若p>n,则p即为最小回文数,如:98712→98789。
⑶若p<=n,则需重新构造p,方法是:从右向左查找字符串st中第一个非“9”的字符;
若不存在,则形成“10…01”的回文数p,p的长度比n的长度多1为,如9999→10001。
若存在,则将第一个非“9”字符加1,并将该字符后面部分用字符“0”填充,最后构造对称的右半部分,生成回文数p,如:98992→99099。
(1) 如 果 n 为 69999, 则 p 为 。
(2)请在划线处填入合适的代码。Private Sub Command1Click()
Dim n As String, st As String, p As String
Dim ln As Integer, i As Integer, j As Integer
n = Text1.Text
ln = Len(n)
st = Mid(n, 1, (ln + 1) 2)
p = st
for i = ln2 To 1 Step -1
p = p +Mid(n,i,1)
Next i
If ① Then
i = (ln + 1) 2
Do While i > 0
If Mid(st, i, 1) = “9″ Then ② Else Exit Do
Loop
If i < 1 Then
p = “1″
For i = 2 To ln
p = p + “0″
Next i
p = p + “1″
Else
p = Mid(st, 1, i – 1)
p = p + Chr(Asc(Mid(st, i, 1)) + 1)
For j = i + 1 To ln – i
p = p + “0″
Next j
If ③ Then p = p + Mid(p, i, 1)
For j = i – 1 To 1 Step -1
p = p + Mid(p, j, 1) ‘ok
Next j
End If
End If
Text2.Text = p End Sub
参考答案:
(1)70007 (1分)
(2) ①p <= n (1分)
②i=i-1 (2分)
③ln Mod 2 = 0 Or i < (ln + 1) 2 (2分)
Python参考代码:
n=input(‘请输入正整数n:n’)
ln = len(n)
st=n[0:(ln+1)//2]
p=st
for i in range(ln//2-1,-1,-1):
p=p+n[i]
if p <= n:
i=(ln+1)//2-1
while i>=0:
if st[i]==’9′:
i=i-1
else:
break
if i<0:
p=’1′
for i in range(1,ln):
p=p+’0′
p=p+’1′
else:
p=st[0:i]
p=p+chr(ord(st[i])+1)
for j in range(i+1,ln-i):
p=p+’0′
if ln %2 == 0 or i < (ln + 1) // 2:
p=p+p[i]
for j in range(i-1,-1,-1):
p=p+p[j]
print(p)
Python代码运行结果:
始发于微信公众号:
中小学Python教学