題目敘述
每筆測資第一行有一個正整數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] << " ";
}
}
留言
張貼留言