問題
1~100までの数字をK個選び、絶対にNにならない組み合わせを作る。
解法
(aの倍数)±(aの倍数)=(aの倍数) となることを利用する。 N が i = 2, 3, 4, 5で割り切れるかを確認していき、割り切れない場合は [ i, 2i, ... , Ki ] を答えとする。
N=60の場合は2, 3, 4, 5のいずれでも割り切れてしまうため、7の倍数を利用する。 しかし、N=60, K=15の場合は、100以下の7の倍数が14個しかないため、 何かもう一つ数字を追加する必要がある。今回は1を追加した。
class WolfCardGame { public: vector <int> createAnswer( int N, int K ) { vector<int> res; for(i = 2, i < 6, i++) { if (N%i != 0) { for(j = 1, j <= K , j++) { res.push_back(i*j); } break; } } if (N == 60) { res.push_back(1); for(i = 1; i < K; i++) { res.push_back(7 * i); } } return res; } };
感想
N=60の考慮+K=15の考慮が漏れてて何度も修正した。。。反省