boj443. 最长数链
时间限制 1000 ms
内存限制 65536 KB
题目描述
现有正整数集A={i|i>0&&i<=n},求A的子集合B,使得对于任意x属于B,y属于B,x整除y或y整除x。优先考虑所含元素多的子集合,然后优先考虑所含元素和大的子集合,然后优先考虑字典序小的子集合。
输入格式
每组数据包含一行一个整数n(n<1e5).输入以EOF结束。
输出格式
每组数据输出一行,从小到大输出所求集合,注意行尾不要有空格。
输入样例
6
100
输出样例
1 3 6
1 3 6 12 24 48 96
k, 2k, 4k 8k...把它们加一下就知道k就是n 一直除二除二再处二直至小于4就OK了
#include
#include
int main()
{
int n,m;
int i,j;
while(scanf("%d",&n)!=EOF){
m=n;
while(m>=4){
i++;
m=(int)( m/2 );
//printf("m = %d\n",m);
//printf("f = %lf\n",f);
}
if(n!=1){
printf("1 ");
}
for(j=m ; j<=n ; ){
printf("%d",j);
j*=2;
if(j