输入1:
1
输出1:
1
输入2:
3
输出2:
1 2 3
题意:
1-20的数字,两个相同数字不能相邻,且他们之间的最小值要严格小于它们。求长度为n的这样的序列。
思路:
大的插在现有的空中间,如下:
1
2 1 2
3 2 3 1 3 2 3
4 3 4 2 4 3 4 1 4 3 4 2 4
代码:
#include<bits/stdc++.h>
using namespace std;
#define fir(i,a,n) for(int i=a;i<=n;i++)
#define ll long long
#define pb push_back
const int N=1e6+10;
int n;
vector<int>v;
int a[N];
int main()
{
cin>>n;
v.pb(1);
int now=2,temp=2;//temp 次数
while(v.size()<=n)
{
auto it=v.begin();
for(int i=0;i<temp;i++)
{
v.insert(it,now);
it=v.begin()+(i+1)*2;//cout<<'a';
}
temp*=2;
//v.insert(v.end(),now);
now++;
}
cout<<v[0];
fir(i,1,n-1) cout<<" "<<v[i];
return 0;
}