在某個城市裡,有一間特別的數字旅館。這間旅館共有三棟大樓,但房號不是一般的順序排列,而是有以下的特殊規則:
- 如果房號可以被 3 整除,也可以被 2 整除,此房間放置在 1 號大樓。
- 如果房號最後一位是奇數,但不能被 3 整除,此房間放置在 2 號大樓。
- 如果房號是完全平方數,或是不能被 7 整除的偶數,此房間放置在 3 號大樓。
- 如果同時滿足多種可能,則房間在編號最小的大樓。
現在,請你幫助剛到來的 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