ZeroJudge N361: 數字旅館 (Hotel)

題目敘述

每筆測資第一行有一個正整數N,第二行會有N個正整數代表房間號碼。要求輸出每一個房間位於哪一棟大樓。

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


範例輸入 #1

4

12 16 31 9

範例輸出 #1

1 3 2 3


範例輸入 #2

5

23 1 600 909 44

範例輸出 #2

2 2 1 0 3


解題思路

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

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

#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 M933: 邏輯電路

ZeroJudge A148: You Cannot Pass?!

ZeroJudge A263: 日期差幾天