题目大衣是给你n个1,每次放到队列最右端,最右端两个数v一样的时候可以合并成v+1,求最后队列结果。
简单模拟,一个一个放,放完了写个while合并就好。
#include<cstdio>
#include<iostream>
#include<cstring>
#include<string>
#include<algorithm>
#include<cmath>
using namespace std;
int n;
int m;
int a[110000];
int main(){
scanf("%d",&n);
m=0;
for(int i=1;i<=n;i++){
m++;
a[m]=1;
while(a[m]==a[m-1]){
a[m-1]++;
m--;
}
}
for(int i=1;i<m;i++){
printf("%d ",a[i]);
}
printf("%d\n",a[m]);
return 0;
}