注:本文为洛谷用户 zhangsenhao6728(也就是我)的题解,已提交成功。
这让我想到了二进制。
( 1 ) 2 → ( 1 ) 10 (1)_2\ \ \ \ \rightarrow(1)_{10} (1)2 →(1)10
( 10 ) 2 → ( 2 ) 10 (10)_2\ \ \rightarrow(2)_{10} (10)2 →(2)10
( 11 ) 2 → ( 3 ) 10 (11)_2\ \ \rightarrow(3)_{10} (11)2 →(3)10
( 100 ) 2 → ( 4 ) 10 (100)_2\rightarrow(4)_{10} (100)2→(4)10
( 101 ) 2 → ( 5 ) 10 (101)_2\rightarrow(5)_{10} (101)2→(5)10
( 110 ) 2 → ( 6 ) 10 (110)_2\rightarrow(6)_{10} (110)2→(6)10
( 111 ) 2 → ( 7 ) 10 (111)_2\rightarrow(7)_{10} (111)2→(7)10
. . . ... ...
观察上表我们发现,二进制是一位数的数字,两两不为倍数关系;二进制是两位数的数字,两两不为倍数关系;二进制是三位数的数字,两两不为倍数关系……
所以,二进制的 A i A_i Ai 有几位,十进制的 A i A_i Ai 就是多少。
代码:
#include<bits/stdc++.h>
using namespace std;
int a[100001];
int main(){
int now=1,nnow=1;
int n;
cin>>n;
for(int i=1;i<=n;){
for(int j=1;j<=now&&i<=n;j++,i++){
a[i]=nnow;
}
nnow++;//十进制 Ai 加一,二进制 Ai 加一位
now*=2;//位数为 nnow 的二进数的个数
}
for(int i=1;i<=n;i++){
cout<<a[i]<<' ';
}
return 0;
}