ZeroJudge N361: 數字旅館 (Hotel)

在某個城市裡,有一間特別的數字旅館。這間旅館共有三棟大樓,但房號不是一般的順序排列,而是有以下的特殊規則:

  1. 如果房號可以被 3 整除,也可以被 2 整除,此房間放置在 1 號大樓。
  2. 如果房號最後一位是奇數,但不能被 3 整除,此房間放置在 2 號大樓。
  3. 如果房號是完全平方數,或是不能被 7 整除的偶數,此房間放置在 3 號大樓。
  4. 如果同時滿足多種可能,則房間在編號最小的大樓。

現在,請你幫助剛到來的 N 個旅客,找到他們的房間在幾號大樓。

範例測資

範例輸入範例輸出
輸入共有兩列,第一列包含一個數字 N (1 ≤ N ≤ 100),表示來了 N 個旅客。
第二列包含 N 個數字 ki (1 ≤ ki ≤ 107),表示每個房客入住的房號,數字間以空白間隔。
輸出 N 個數字,依序表示每個房客要入住幾號大樓,如果該房號不屬於任何一個大樓,則輸出 0。
4
12 16 31 9
1 3 2 3
5
23 1 600 909 44
2 2 1 0 3

解題思路

使用 if 和 else if 來判斷,這樣子如果有重複條件的編號就會直接在最前面的判斷式停下來

範例程式碼-ZeroJudge N361: 數字旅館 (Hotel)

#include <iostream>
#include <math.h>
#include <map>
using namespace std;

int main() {
    cin.sync_with_stdio(0);
    cin.tie(0);
    int N;
    cin >> N;
    map<int, int>MAP;
    for (int i = 0; i<N; i++)
    {
        int tmp;
        cin >> tmp;
        if (MAP[tmp] == 0)
        {
            if (tmp % 3 == 0 && tmp % 2 == 0) MAP[tmp] = 1;
            else if (tmp % 2 != 0 && tmp % 3 != 0) MAP[tmp] = 2;
            else if (pow(int(sqrt(tmp)), 2) == tmp || (tmp % 7 != 0 && tmp % 2 == 0)) MAP[tmp] = 3;
            else MAP[tmp] = -1;
        }
        if (MAP[tmp] == -1) cout << "0 ";
        else cout << MAP[tmp] << " ";
    }
}

//ZeroJudge N361
//Dr. SeanXD

發佈留言