首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

音樂調性轉換:給定調性名稱輸出其等價異名或UNIQUE

     編輯:關於C語言

音樂調性轉換:給定調性名稱輸出其等價異名或UNIQUE

問題源自 UVa "A Famous Music Composer"。12 個音高類(A, A#/Bb, B, C, C#/Db, D, D#/Eb, E, F, F#/Gb, G, G#/Ab)各有大/小調,共 24 個調性。輸入調性名(如 Ab minor),若存在等價異名(如 G# minor)則輸出異名,否則輸出 UNIQUE。

等價對應表

  • A# ⇄ Bb
  • C# ⇄ Db
  • D# ⇄ Eb
  • F# ⇄ Gb
  • G# ⇄ Ab

大/小調保持不變,僅轉換音名。

解法

while (scanf("%s%s", s1, s2) != EOF) {
    printf("Case %d:", caseNo++);
    if (!strcmp(s1, "A#")) printf(" Bb %s\n", s2);
    else if (!strcmp(s1, "Bb")) printf(" A# %s\n", s2);
    else if (!strcmp(s1, "C#")) printf(" Db %s\n", s2);
    else if (!strcmp(s1, "Db")) printf(" C# %s\n", s2);
    else if (!strcmp(s1, "D#")) printf(" Eb %s\n", s2);
    else if (!strcmp(s1, "Eb")) printf(" D# %s\n", s2);
    else if (!strcmp(s1, "F#")) printf(" Gb %s\n", s2);
    else if (!strcmp(s1, "Gb")) printf(" F# %s\n", s2);
    else if (!strcmp(s1, "G#")) printf(" Ab %s\n", s2);
    else if (!strcmp(s1, "Ab")) printf(" G# %s\n", s2);
    else printf(" UNIQUE\n");
}

直接字符串匹配,時間複雜度 O(1) 每測試用例。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved