构造题。
我递归构造的,发现如果N>3的话就优先删奇数,然后就把删完的提取一个公约数2,再重复操作即可。
#include <iostream> #include <cstdio> #include <vector> using namespace std; int n; void print(int sz,int tp) { if(sz==3) {printf("%d %d %d",tp,tp,tp*3);return;} if(sz==2) {printf("%d %d",tp,tp*2);return;} if(sz==1) {printf("%d",tp);return;} for(int i=1;i<=sz-(sz>>1);i++) printf("%d ",tp); print((sz>>1),tp<<1); } int main() { scanf("%d",&n); print(n,1); }