ZeroJudge L003: 棋盤

題目敘述

本題採EOF方式收資料,每筆資料有一個字串,會包含兩個數字。要求輸出這兩個數字組合而成的座標之後的位置。


範例輸入 #1

(1,5)

(6,7)

(10,10)

(8,4)

(7,9)

範例輸出 #1

----1-----

----------

----------

----------

----------

------2---

--------5-

---4------

----------

---------3


範例輸入 #2

(1,1)

(3,7)

(2,8)

範例輸出 #2

1---------

-------3--

------2---

----------

----------

----------

----------

----------

----------

----------


解題思路

將座標取出來之後使用Map來紀錄每一個座標的位置。之後使用For迴圈10*10,如果目前的 (i, j) 在Map中有存取資料而非0,則輸出這個Map值,如果是0則輸出-。

解題程式碼如下 (僅供參考):

#include <iostream>
#include <map>
using namespace std;

pair<int, int> axis (int a, int b)
{
    pair<int, int>tmp;
    tmp.first = a;
    tmp.second = b;
    return tmp;
}

int main() {
    cin.sync_with_stdio(0);
    cin.tie(0);
    string str;
    int count = 1;
    map<pair<int, int>, int>MAP;
    while (cin >> str)
    {
        int a, b;
        if (str[2] != ',')
        {
            a = 10;
            if (str[5] != ')') b = 10;
            else b = int(str[4] - '0');
        }
        else
        {
            a = int(str[1] - '0');
            if (str[4] != ')') b = 10;
            else b = int(str[3] - '0');
        }
        MAP[axis(a, b)] = count;
        count++;
    }
    for (int i = 1; i<=10; i++)
    {
        for (int j = 1; j<=10; j++)
        {
            if (MAP[axis(i, j)] != 0) cout << MAP[axis(i, j)];
            else cout << "-";
        }
        cout << "\n";
    }
}

留言