a629. 9. Musical Intervals
Tags :
Accepted rate : 56人/60人 ( 93% ) [非即時]
評分方式:
Tolerant

最近更新 : 2013-02-22 11:35

Content

音樂中的音程代表在同一音階中兩個音符的距離。我們可以用鋼琴鍵盤表示音符:

在鍵盤下方的是音符的音名,鍵盤上方的部份則表示全音和半音。這個鍵盤只顯示一部份的鍵而已。越往左的鍵音越低,越往右的鍵音越高。音符 A 到 G 會一直重覆。在一般音符 (白鍵) 之間還有額外的升音符 (黑鍵)。 移動到相鄰的鍵便是半音,移動兩個鍵的距離便是全音。注意,雖然 E 和 F (或 B 和 C) 是相鄰的白鍵,但是 F 和 G (或 G 和 A,或 C 和 D,或 A 和 B) 卻不相鄰,因為中間夾了黑鍵。

這個題目使用的是大調音階。大調音階是起始及結束於相同音名的一連串的八個音符 (稱為八度音)。以 A 大調為例,它有如下的進程:1) 起始音 (A);2)全音 (B);3)全音 (C#);4)半音 (D);5)全音 (E);6)全音 (F#);7)全音 (G#) 8) 半音 (回到 A)。你可以從任何一個鍵開始並遵循這個模式來衍生出一個大調音階。任何一個大調音階都可從一個主音開始,用相同的模式來導出。比如說:起始音:G#;全音:A#;全音:C;半音:C#;全音:D#;全音:F;全音:G;半音:G#。

一個特定的音程便是從一個音符到另一個音符之間的距離。起始音符為 1,再沿著音階數到指定的音符。因此,A大調音階上從 B 往上的第二個音程便是 C# (B=1, C#=2)。A大調上從 G# 開始向下的第七音程便是 A (向左移動 G#=1, F#=2, E=3, D=4, C#=5, B=6, A=7)。

Input
每一筆測資一行,其中含有一個調名及一連串的音程 (最多 15 個)。調名可以是一個字母 (例如 A) 或是一個字母加一個升記號 (例如 A#)。第一個音程以主音開始,其後的音程則用前一個音程結束的音符開始。向右的音程以正號 (+) 來輸入。向左的音程則以負號 (-) 來輸入。
Output
程式必須先輸出主音,再照著輸入的音程來輸出相對應的音符。
Sample Input #1
A+2+5-6+9+10-11+3+3
G#-3+6-13+15+2-7+2-5+6-2+7
B-3+2-7
Sample Output #1
A B F# A B D A C# E
G# F C# F F G G# A# D# C A# G#
B G# A# B
測資資訊:
記憶體限制: 512 MB
公開 測資點#0 (100%): 1.0s , <1K
Hint :
Tags:
出處:
HP CodeWars2007 [管理者: snail (蝸牛) ]

Status Forum 排行

ID User Problem Subject Hit Post Date
沒有發現任何「解題報告」