English Deutsch Français Italiano Español Português 繁體中文 Bahasa Indonesia Tiếng Việt ภาษาไทย
所有分類

我要去考勞委會的軟體設計丙級
以下是題目
http://www.labor.gov.tw/management/sitemap_upload_file/iiw/exambank/new11900.exe

根據題目301所寫的題目
我寫了以下的程式做測試用
但是我發現一點
就是如果將所有的值都輸入一樣
也會判斷正確
像是55555,
但是55555看起來不像是迴文,大家覺得呢?
也歡迎其他大大有更好的寫法給小弟做參考
不過根據題目第一站不能使用VB內建的函數唷!

以下是我寫來測試的,有寫錯的地方歡迎批評指教
因為我不確定讀進來的檔案字串長度,所以都宣告的有點大XD

Dim dd, a(99), b(99)

c = InputBox(\"please key any value\", \"palindrome text\", \"12321\")

dd = c \'dividend

For i = 1 To 99
a(i) = dd Mod 10

If dd < 10 Then
n = i
Exit For
Else
dd = dd \\ 10
End If
Next i

t = 0
For i = 1 To n \\ 2
If a(i) <> a(n + 1 - i) Then t = 1: Exit For
Next i

If t = 0 Then
Print \"第一題結果:\"; c; \" is a palindrome.\"
Else
Print \"第一題結果:\"; c; \" is not a palindrome.\"
End If

2006-02-02 05:50:44 · 2 個解答 · 發問者 昭宇 3 in 電腦與網際網路 程式設計

奇怪..我明明有作縮排阿,
然後b(99)不小心多宣告了
大家別介意阿~~

2006-02-02 05:57:01 · update #1

windows大大
我想到的就是利用mod取餘數從個位數十位數百位數依序去做...就是我上面打的,其他的就想不

到了

至於我問的重點是55555是否迴文
我需不需要再設定一些限制條件?

還有能迴文的不一定能背11整除
78987也是迴文但不會被11整除阿~~~
12321只是測試檔,正式檔不一定是11的倍數

不用陣列去存
在下愚魯
能請您說明您的想法嗎?

2006-02-02 12:06:58 · update #2

對喔,如果第一個數字是0就掛了
當時沒想到,感謝 W.J.S.大大的提醒
如果是0123210
在做第一輪的運算時碰到除法第一個零會自動消失
要克服這點還挺麻煩的
用Redim應該ok,只是我不太會用
不過我大概看的懂大大寫的程式

2006-02-02 14:19:38 · update #3

這次W.J.S.大大補充的程式
我就完全看懂了,
宣告兩個變數
一個從右邊遞減,一個從左邊遞增做比較
果然不需要用到陣列~~~

我重新看了題目,大大說的對
他有說是正整數所以第一個數字是不會有 0 出現的
而大大介紹的方法也很簡單容易了解

目前只剩下55555不確定是否迴文囉

2006-02-03 03:48:42 · update #4

windows大大您客氣了~~
我也常會弄錯事情
也感謝您的回覆
我也得到可靠消息
55555的確是迴文感謝大家的回覆

2006-02-07 17:14:40 · update #5

2 個解答

我的方式也跟你差不多,其中ReDim Preserve應該不違法,你參考一下...不過我也不知道55555算不算是迴文XD,還有你跟我的方式如果第1個字是0就掛了!!
Private Sub Command1_Click()
Dim A(), C, I, X, N As Integer, B As Boolean, D As Boolean
Cls
C = InputBox("please key any value", "palindrome text", "12321")
If C = "" Then Exit Sub
X = 10
For I = 1 To C
  ReDim Preserve A(N)
  A(N) = (C Mod X) \ (X / 10): N = N + 1: X = X * 10
  If X > C * 10 Then Exit For
Next

'若5555算迴文就把下面虛線內程式碼移除
'----------------------------------------------------
X = A(0)
For I = 1 To N - 1
  If A(I) <> X Then D = True: Exit For
Next
'-----------------------------------------------------
B = True
For I = 0 To N - 1
  If A(I) <> A(N - 1) Then B = False: Exit For
  N = N - 1
Next
If B And D Then '若5555算迴文就改成 If B Then
 Print "第一題結果:"; C; " is a palindrome."
Else
 Print "第一題結果:"; C; " is not a palindrome."
End If
End Sub

2006-02-02 20:32:59 補充:
突然想到1個更簡單的方法,不須用到陣列Dim I, X, Y, C As Long, B As BooleanC = 12321X = 10: Y = 10For I = 1 To C  If X > C Then Exit For  X = X * 10NextB = TrueFor I = 1 To C  If (C Mod Y) \ (Y / 10) <> (C Mod X) \ (X / 10) Then B = False: Exit For  If X <= Y Then Exit ForNextPrint B

2006-02-02 20:42:34 補充:
上面的程式碼:If (C Mod Y) \ (Y / 10) <> (C Mod X) \ (X / 10) Then B = False: Exit For 跟 If X <= Y Then Exit For 之間要補一行 X = X / 10: Y = Y * 10 否則會產生錯誤(奇怪怎麼會少複製到這一行XD)其實題目有說是一整數,第一字若為零當然就應刪除吧?

2006-02-02 21:47:50 補充:
在字串前面隨便加一個數字,做比較時不要比較此數字,就能解決第一字若為零的問題,請改一下CODEDim I, X, Y, C As Long, B As Boolean,S As StringS = "0123210" :C = "1" & SX = 10: Y = 10For I = 1 To C  If X > C \ 10 Then Exit For  X = X * 10Next

2006-02-02 13:41:05 · answer #1 · answered by W.J.S. 7 · 0 0

跟你說一下:什麼是迴文,如12321共5位數字中間值是(5+1)/2=3,即最大值且是中間值是3,其左右遞減至1為止,換句話說:121也是迴文,1234321當然也是迴文,123454321也是迴文,但是如果是123454322就不是迴文了,懂嗎!!!因為題目有說迴文數字總共有9位數的長整數,即最大只能到123454321,
關鍵來了...如何去判斷呢?很簡單!!題目是12321,我就想到121,那121就是11的平方!!!所以12321就是111的平方!1234321=1111*1111,123454321=11111*11111
如何用程式寫呢...你先想想看,不需要用到陣列,不會再問我...有一點技巧喔!!!

2006-02-06 16:53:33 補充:
非常抱歉!我以為迴文一定是從1開始,其實不對,依照題目的定義:左右讀起均同,55555也是迴文了,我自己寫的程式跟你差不多,且用陣列來做,再次抱歉!

2006-02-02 11:51:44 · answer #2 · answered by windows 4 · 0 0

fedest.com, questions and answers