2013年7月7日 星期日

10528 - Major Scales



Problem C: Major Scales

在音樂中, 可聽見的頻率範圍被切分成音階(octaves),每個音階是在由另外兩個音階的 2 倍或一半。例如:音符 C(中間 C) 頻率為 263 Hz。而低音 C(低八度) 的頻率範圍在 131.5 Hz 到 263 Hz,高音 C(高八度) 的頻率範圍在 263 Hz 到 526 Hz

一個八度包含 13 個半音,而彼此頻率的差值都是同一個比率關係。
兩個相鄰的半音同常會稱為 half-step 或者是 semi-tone。在同一個音階上,只會有 12 個 semi-tones,而頻率比率為 1.0593 (因為 1.059312 = 2)。一個全音(tone)由兩個半音構成,雖然可以很方便地使用頻率來表示每個音符,但在歷史傳統上,我們將命名每個音符順序為 C, C#, D, D#, E, F, F#, G, G#, A, A#, B, C 類推,在新八度音上也使用相同的名稱。

西方音樂很少使用所有半音音階的音符。取而代之的是,通常只使用 13 個半音中的 8 個音符來組成。而這經常使用的 8 個音符稱作主旋律 (major scale),而這主要 8 個音符的順序依序為 tone, tone, semi-tone, tone, tone, tone, semi-tone (全全半全全全半)。
//以 C 大調為例,兩個相鄰白鍵中間夾了一個黑鍵就是全音,反之就是半音。

主旋律將會從被定義為從第一個起音音符為名稱,例如 C 大調,包含 C, D, E, F, G, A, B, C,
而 F 大調,包含 F, G, A, A#, C, D, E, F。

而在有一些小調(minor scale)中,將會使用變音記號(accidental),如升記號 #。


你的工作將要讀入一些音符,判斷所有的音符,而決定可能是哪個調所組成的。
你的程序不需要去監聽音樂,回報所有可能的大調藉由上述的命名方式。


輸入有數筆,每一筆將只會有一行,會有一系列的音符由空白分開。
每一行不超過 1000 個字元,最後一行只包含 "END" 。

對於每組測資,輸出可能的曲調名,順序按照上述給定的。

Sample Input

C C D F E G A A F G B
A B C D E F G C#
C C D F E G A A F G
C C C C C
END

Output for Sample Input

C

C F
C C# D# F G G# A#

G. Cormack