2010年9月28日 星期二

排名順序

內容 : 正體->简体 
考試成績出爐了,大家開始討論自己的分數高低
一個接著一個參與討論,新加入的那個人,想要知道自己目前排名是多少
但是太多人了,導致沒辦法一時得到他的排名
大家開始請求小光這個答案,
不過小光非常討厭排名,一點都不想幫忙
現在就交給你了
輸入說明 :
每組輸入的第一行有一個數字N(1≦N≦10,0000),
代表接下來會有N個人陸續與討論,接下來會有N行,
代表接下來陸續加入的人的成績M, (1≦M≦N)
而且每個人的成績都不會重複
輸出說明 :
對於已經知道的成績,請陸續對每個加入的輸出他的排名
範例輸入 :help
1
5
2
範例輸出 :
5

SOS ~~~

內容 :
由於阿許吹的哨聲根本沒人聽懂,

所以到現在他還是迷失在深山中。

此時,

同樣在深山迷路的小綠跟阿波出現了!

小綠說:阿許!原來是你在吹哨!我還想說是什麼奇怪的聲音呢!

阿波說:哈哈你連哨子都不會吹,求救的哨音應該是幾個短音幾個長音吧 ... 順序我也忘了耶!

這時三個人拿著哨子不知如何是好,請你幫幫忙吧!

給你 n 個短音 m 個長音,輸出這個哨音的所有吹法。

輸入說明 :
每組測試資料包含兩個整數 n, m 。( 0 ≤ n, m ≤ 10 )

輸出說明 :
請輸出 n 個短音 m 個長音的所有排法,

每組輸出之間保留一空行。

範例輸入 :

2  1
3  2
範例輸出 :

SSL
SLS
LSS

SSSLL
SSLSL
SSLLS
SLSSL
SLSLS
SLLSS
LSSSL
LSSLS
LSLSS
LLSSS

奇摩知識

內容 : 

題目描述
         大家都知道二進制是由0和1兩種數字組成的,十進制轉二進制, 小明現在要玩一個遊戲, 就是由1數到n,每數到一個數, 這個數的二進制有多少個1, 小明就要站起多少次, 例如數到9, 由於其二進制為1001, 所以小明要站起來兩次, 為了知道自己能否應付這個遊戲, 請你為小明算出, 由1數到n他必須站起來多少次?
輸入說明 :
每一行有一個數字N (1≦N≦1,0000,0000)
輸出說明 :
請輸出小明總共要站起來的次數。請輸出mod 1000000000 之後的結果
範例輸入 :help
12
範例輸出 :
22
提示 :
※ 數學、遞迴

2010年9月27日 星期一

小白加法

Dim ansS As String, c As String
Private Sub Form_Load()
Open App.Path & "\in.txt" For Input As #1
Input #1, A
Input #1, Sy
Input #1, B
Call ans1(A, B)
End Sub

Public Sub ans1(ByVal x As String, ByVal y As String)
A = Len(x)
B = Len(y)
If A < B Then M = A: Max = B: c = y Else M = B: Max = A: c = x
ReDim sA(A) As Integer, sB(B) As Integer, ans(Max + 1) As Integer
For i = 1 To M
    sA(i) = Mid(x, A - i + 1, 1)
    sB(i) = Mid(y, B - i + 1, 1)
    ans(i) = sA(i) + sB(i) + ans(i)
    If ans(i) > 9 Then
    ans(i + 1) = ans(i) \ 10
    ans(i) = ans(i) Mod 10
    End If
Next i

For i = M + 1 To Max
    ans(i) = ans(i) + Mid(c, Max - i + 1, 1)
    If ans(i) > 9 Then
    ans(i + 1) = ans(i) \ 10
    ans(i) = ans(i) Mod 10
    End If
Next i

For i = Max + 1 To 1 Step -1
ansS = ansS & ans(i)
Next i
If Mid(ansS, 1, 1) = 0 Then ansS = Mid(ansS, 2, Len(ansS) - 1)
Print ansS
End Sub


阿揚有幫我看過了,應該是OK

阿揚加法 AND 乘法 改

Dim aa(1000) As Integer
Dim bb(1000) As Integer
Dim cc(1000) As Integer
Dim c As String
Private Sub Form_Load()
Open App.Path & "\in.txt" For Input As #1
Line Input #1, a
Line Input #1, b
Print a
Print b
Print myadd(a, b)
Print myfold(a, b)
Print k
Close #1
End Sub

Public Function myadd(a, b) As String
Dim c As String, q1 As Integer, q2 As Integer, nt As Integer
nt = 0: c = ""
If Len(a) < Len(b) Then
    Min = Len(a): Max = Len(b): k = b
Else
    Min = Len(b): Max = Len(a): k = a
End If
For i = 1 To Min
q1 = Mid(a, Len(a) - i + 1, 1)
q2 = Mid(b, Len(b) - i + 1, 1)

c = ((q1 + q2 + nt) Mod 10) & c
nt = (q1 + q2 + nt) \ 10
Next i
If nt > 0 Then
 If Max = Min Then
   myadd = nt & c
 Else
    myadd = myadd(Left(k, Max - Min), nt) & c
 End If
Else
 If Max = Min Then
   myadd = c
 Else
   myadd = Left(k, Max - Min) & c
 End If
End If
End Function

Public Function myfold(a, b) As String
Dim k As Integer
For i = Len(b) To 1 Step -1
t = Mid(b, i, 1)
    For j = Len(a) To 1 Step -1
        k = Len(a) - j + Len(b) - i
        r = Mid(a, j, 1)
            n = t * r
           Do Until k <= 0
            n = n & "0"
            k = k - 1
           Loop
           ln = myadd(n, ln)
    Next j
Next i
myfold = ln
End Function

2010年9月20日 星期一

阿揚丙級軟體設計

Private Sub Form_Load()
q1
q2
q3
q4
q5
End Sub


Public Sub q1()
Dim arr(9) As Integer
Open App.Path & "\1in.txt" For Input As #1
Open App.Path & "\out.txt" For Output As #2
Input #1, x
Print x;
c = x
ans = True
For i = 1 To 9
If 10 ^ i > x Then k = i: Exit For
Next i
For i = 1 To k \ 2 + 1
a = c Mod 10
c = c \ 10
b = x \ 10 ^ (k - i)
x = x Mod 10 ^ (k - i)
If a <> b Then ans = False
Next i
If ans Then Print " is a palindrome." Else Print " is not a palindrome."

Close #2
Close #1
End Sub


Public Sub q2()
Open App.Path & "\2in.txt" For Input As #1
Open App.Path & "\out.txt" For Output As #2
Input #1, x
For i = 1 To x
c = c & i
Print c
Next i
Close #2
Close #1
End Sub


Public Sub q3()
Open App.Path & "\3in.txt" For Input As #1
Open App.Path & "\out.txt" For Output As #2
Input #1, x
ans = True
i = 2
Do
If x Mod i = 0 And x = 2 And x = 1 Then ans = False
i = i + 1
Loop While i <= (x ^ 0.5)
If ans Then Print x & " is a prime number." Else Print x & " is not a prime number."
Close #2
Close #1
End Sub


Public Sub q4()
Open App.Path & "\4in.txt" For Input As #1
Open App.Path & "\out.txt" For Output As #2
ans = 99
Do Until EOF(1)
Input #1, h, w
bmi = ((w / (h / 100) ^ 2 + 0.5) * 10) \ 10
If bmi < ans Then ans = bmi
Loop
If (ans > 20) And (ans < 25) Then Print ans & " 正常" Else Print ans & " 不正常"
Close #2
Close #1
End Sub


Public Sub q5()
Dim a(2, 2)
Dim b(2, 2)
Dim c(2, 2)
Open App.Path & "\5in.txt" For Input As #1
Open App.Path & "\out.txt" For Output As #2
Input #1, a(1, 1), a(1, 2), a(2, 1), a(2, 2)
Input #1, b(1, 1), b(1, 2), b(2, 1), b(2, 2)
For i = 1 To 2
Print "[";
For j = 1 To 2
c(i, j) = a(i, j) + b(i, j)
Print c(i, j);
Next j
Print "]"
Next i
Close #2
Close #1
End Sub

一堆石頭

內容 : 正體->简体
可愛的潘潘有著一堆石頭,每顆石頭上面都有一個正整數編號。接著,她又利用複製機器把每顆石頭都複製了兩個,而編號當然跟原來那個一樣。

可是有一天,她不小心掉了一顆石頭,現在她想要找出她掉的那一顆石頭的編號。

輸入說明 :
只有一筆測資給你她現在所擁有的石頭的編號,用空格分開。

當然,個數一定是三的倍數減一個。

輸出說明 :
輸出她掉的那一顆石頭的編號。
範例輸入 :

9 8 6 9 8 2 3 5 2 1 6 8 1 5 1 2 3 3 5 9
範例輸出 :

6

好累的小玫

內容 : 正體->简体
小玫,小熊跟小羊正在玩闖關遊戲,這關要摧毀101大樓,前提就是要算出一個很長很長的數,也就是過關密碼。

其中小熊經由秘密管道得知,這個數就是 1! * 2! * 3! * ......... * 100!,

小玫負責算出這個數,可是因為這個數實在太長了,因此小玫算的好累好累。



現在小羊想要請你幫忙,你可以輸出 "我不想幫忙" (不含引號) 接著得到WA ,或是正確輸出這關的過關密碼,得到AC。

(因為台北101很高很高,所以你輸出的解答也必須每輸出一個數字後換一行。)

PS.姓名純屬杜撰,如有雷同純屬巧合。

(測資已更正...不好意思XDD)

輸入說明 :
本題沒有輸入。

輸出說明 :

請輸出一個很像答案的東西。

範例輸入 :

輸入範例要很有智慧的國王才能看到。
範例輸出 :

只可意會不可言傳。

一堆線段

內容 :
愛斯基摩人給了你一堆線段,他想要問這些線段能組合出幾種多邊形呢?

對了 他說那些線段長度不會有重複的

輸入說明 :
有多組測試資料

每組測試資料佔一行,有一些以一個空白分開的正整數(不超過100個),並且行末不會有多餘的空白

若該組測試資料只含有0 ,請結束程式且不要輸出任何數字

(所有資料均不會大於1000000)

輸出說明 :
對每組測試資料輸出一個數

代表這些線段能組合出幾種多邊形 (多邊形為三邊或以上)

範例輸入 :

3 5 6 9 4
2 3 4 10
7 8 9
1 2 10
7 8
0
範例輸出 :

12
1
1
0
0
提示 :
在第一組測試範例中:

三角形:
3 4 5
3 4 6
3 5 6
4 5 6
4 6 9
5 6 9

四邊形:
3 4 5 6
3 4 5 9
3 4 6 9
3 5 6 9
4 5 6 9

五邊形:
3 4 5 6 9

2010年9月15日 星期三

小白的程設丙檢

Private Sub Form_Load()
Open "\title.txt" For Input As #1
Input #1, myName, mySeat, myId, myData
Close #1
Print "姓名:" & myName, "准考證號碼:" & myId
Print "座號:" & mySeat, , "日期:" & myData
Print
Print
Call Q1
Call Q2
Call Q3
Call Q4
Call Q5
End Sub

Public Sub Q1()
'******************************
'* 11900-940301 Program Start *
'******************************
Dim A(9) As Integer
Open App.Path & "\940301.t01" For Input As #1
Input #1, x
Close #1
ans = x
Do While Not x = 0
B = B + 1
A(B) = x Mod 10
x = x \ 10
Loop
Do While i = B \ 2
If A(i) <> A(B - i + 1) Then
Print "第一題結果:" & ans & " is not a palindrome."
Exit Sub
End If
i = i + 1
Loop
Print "第一題結果:" & ans & " is a palindrome."
End Sub

Public Sub Q2()
'******************************
'* 11900-940302 Program Start *
'******************************
Open App.Path & "\940302.t01" For Input As #1
Input #1, x
Print "第二題結果:"
i = 1
Do While Not i = x + 1
ans = ans & i
Print ans
i = i + 1
Loop
Close #1
End Sub

Public Sub Q3()
'******************************
'* 11900-940303 Program Start *
'******************************
Open App.Path & "\940303.sm" For Input As #1
Input #1, x
Close #1
isprime = True
If x = 1 Then
Print "第三題結果:" & x & " is not a prime number."
Exit Sub
End If
i = 2
Do While i <> x ^ 0.5
If x Mod i = 0 Then
isprime = False
Print "第三題結果:" & x & " is not a prime number."
Exit Sub
End If
Loop
Print "第三題結果:" & x & " is a prime number."
End Sub

Public Sub Q4()
'******************************
'* 11900-940304 Program Start *
'******************************
Open App.Path & "\940304.sm" For Input As #1
M = 99
Do While i <> 3
Input #1, H, W
B = ((W / ((H / 100) ^ 2)) * 10 + 5) \ 10
If B < M Then M = B
i = i + 1
Loop
If M < 20 Then
Print "第四題結果:最小BMI值=" & M & ",不正常"
ElseIf M < 25 Then
Print "第四題結果:最小BMI值=" & M & ",正常"
Else
Print "第四題結果:最小BMI值=" & M & ",不正常"
End If
Close #1
End Sub

Public Sub Q5()
'******************************
'* 11900-940305 Program Start *
'******************************
Dim A(8) As Integer
Open App.Path & "\940305.sm" For Input As #1
For i = 1 To 4
Input #1, A(2 * i - 1), A(2 * i)
Next i
For i = 1 To 4
A(i) = A(i) + A(i + 4)
Next i
Print "第五題結果:"
For i = 2 To 4 Step 2
Print "[ "; A(i - 1), A(i); " ]"
Next i
End Sub



(未完成)

2010年9月13日 星期一

字串處理問題 (String)

問題描述
      本題目為字串處理問題,程式需讀取一行英文字串,並依據讀入相關之指令,
來編修該字串。程式開始執行時,游標位於該英文字串的第一個字元。編修字串的指令
如下:
0 - 移動游標至目前所在行的第一個字元。
$ - 移動游標至字串的結束位置(即最後一個字元的下一個位置)。
x - 刪除目前游標所在位置的字元(如果在字串的結束位置則不做任何動作)。
s - 與游標所在位置的右邊字元做交換動作(如果游標在結束位置或結束位置的前一
     個位置,則不做任何動作)。
i -    在游標所在位置插入字元。如指令 ‘ix’ ,則是在游標目前所在位置前插入字元
     ‘x’,游標停留在原始的位置(即所插入‘x’ 的下一位置)。
u   - 如果游標所在位置之資料為英文字母,則將該字母改為大寫,並將游標往右移一
       個位置,如不是英文字母,則直接將游標往右移一個位置。
+  - 將游標向右移一個位置。
-   -   將游標向左移一個位置。
輸入說明 :
1. 第一行為要編修的英文字串(不超過250 個字元)。
2. 第二行為編修英文字串的指令。
輸出說明 :
請輸出處理完畢之字串。

範例輸入 :

hellol, I am a frog.
$-----xxxxipieirisioin0u++xs
範例輸出 :

Hello, I am a person.
                     貼文 BY 阿揚

2010年9月12日 星期日

裝貨櫃問題

內容 :
現在一共有若干項貨品可選擇運載,每一項k都有一個已知的體積v[k],以及載運的利潤c[k],但是貨櫃的總容量是100,可能無法將貨物全部裝入,希望選出其中的若干項,其體積總和不超過100,使得利潤最大。(每一項貨物的體積為1~100 的整數,而利潤是1~60000 的整數。)

輸入說明 :
 第一行是貨品數量,接下來每行各有兩筆數據,第一筆代表各項貨物的體積,第二筆代表各項貨物的利潤。

輸出說明 :
輸出最大的利潤,例如輸出一、二項:第一項貨物的體積為30,利潤為60,第二項貨物的體積為20,利潤為50

範例輸入 :

4
30 60
20 50
35 40
60 70 
10 
80 88 
33 66 
13 26
77 150 
95 195 
45 90
8 16 
20 41 
40 13 
68 20
範例輸出 :

150 
198
                         貼文 by 阿揚

產品包裝

內容 : 
某工廠生產4種正立方體產品,邊長分別為1,2,3,4公分,該工廠的包裝箱為4*4*4公分(不計算包裝箱厚度),現在有若干筆訂單,每一筆訂購單可能包括各種產品但數量可能不同,請計算每一筆訂購最少各需要多少的包裝箱。

輸入說明 :
每行是一筆訂購單,由四個整數組成,每個整數以一個空白間格,依序分別代表邊長1,2,3,4公分的產品數量,每一個數量均為不大於20000的非負整數,以一個空白隔開。

輸出說明 :
輸出各筆訂購的最少包裝箱數目,每一筆一行。

範例輸入 :
5 4 8 2 
12 14 32 7
範例輸出 :

11 41
              BY 阿揚

2010年9月11日 星期六

分房子


有個富翁,手上有 N 間房子,想要分送給一些朋友。例如 N = 5,那有以下的七種分法:
5
4 + 1
3 + 2
3 + 1 + 1
2 + 2 + 1
2 + 1 + 1 + 1
1 + 1 + 1 + 1 + 1
然而,在富翁所在的國家,偶數被視為是不吉利的。因此,送偶數間的房子給朋友,是禁忌的行為,因此富翁實際上只有三種可行的分法:
5
3 + 1 + 1
1 + 1 + 1 + 1 + 1
給定任意的正整數 N (介於 1 到 750 間),請幫富翁算算到底有多少種可行的分法?
輸入說明 :
輸入檔的第一行有一個正整數 M,代表有 M 組測試資料。以下的 M 行各有一個正整數 N。
輸出說明 :
對於每一組測試資料 N,輸出有幾種可行的(不含偶數的)分法。

範例輸入 :
 5 
2
 5
 4
範例輸出 :

3  3 2
                  貼文 BY 阿揚

文字抄寫

內容 : 
從機器中,不斷地出現4個英文字母的單字,現在要你抄寫下來,
倘若這個單字已經出現過,則會使用編號上的號碼直接書寫
倘若這個單字沒有出現過,則會賦予單字一個新的號碼

每組新的測資,代表不同事件,請勿將其納入新的號碼

輸入說明 :
每組輸入的第一行 , 有一個數字 N (1≦N≦105),接下來會有瘋狂科學家講出的N行單字,每行由小寫字母a到z所構成的4字單字.

輸出說明 :
若這個字串之前已經出現過,則輸出號碼,若沒有則輸出它將被編寫的號碼.

範例輸入 :
5 eine isis zwei drei zwei
範例輸出 :
New! 1 New! 2 New! 3 New! 4 Old! 3
                                         貼文 BY 阿揚

三角形的判斷

內容 : 
給你一個三角形的邊長,請你判斷它是銳角 (acute)、直角 (right)、或是鈍角 (obtuse) 三角形。

輸入說明 :
輸入只有一行,含有三個由空白隔開的正整數 a, b, c (0 < a, b, c ≤ 46340),代表三角形的邊長。
輸出說明 :
依三角形的類別輸出「acute triangle」、「right triangle」、或「obtuse triangle」。

範例輸入 :
3 4 5
範例輸出 :
right triangle            
                                              
                                                  貼文 BY阿揚