#include <iostream>
using namespace std;
void solve() {
int x;
cin>>x;
if (x<36 && x%3!=0) {
cout << "Baka!" << endl;
return;
}
for (int i=1;i<=x/3 && i*3<=36;i++) {
cout << 3*i-2 << " " << 3*i << " " << 3*i-1 << " ";
}
if (x==37) cout << 37;
else if (x==38) cout << 37 << " " << 38;
else if (x>=39) {
cout << 38 << " " << 37 << " ";
for (int i=0;i<(x-39)/3;i++) {
cout << 3*i+40 << " " << 3*i+41 << " " << 3*i+39 << " ";
}
if ((x-39)%3==0) cout << x;
else if ((x-40)%3==0) cout << x << " " << x-1;
else cout << x-1 << " " << x << " " << x-2;
}
}
int main() {
solve();
return 0;
}
// 3
// 37
// 333667
本蒟蒻第一次写题解,浅浅尝试一下。
我认为我的代码应该比较好理解,我们可以先写一段代码(比如for循环1-999999999的数,如果余数为0就输出)找到999999999的质因子(3,37,333667)。
多列几项容易知道37以及之后的x都可以构造出来(38 37 40还余留一个39,39又可以控制两个数,再加两个数仍然可控,再加三个又一定会有3的倍数的数)。故只有x < 36 && x % 3 != 0的情况构造不出来。
x=37,x=38比较特殊,为了方便我后续构造周期性,分情况讨论,输出这两个值。
接下来就好办了,在x>=39的情况下(38 37,40 41 39,43 44 42,46 47 45,......)呈现周期性规律。只要3个3个的并且让小于x的3的倍数的数(这个数一定有)排最后就好了。

京公网安备 11010502036488号