设集合T是所有3的幂集,即T={1,3,9,27,……},现对T的所有子集的元素数值和排序,排在第n位的集合是什么?
输入(请使用标准输入、输入,不要读写文件)
输入数据只有一个正整数n(1<n≤4,000,000,000=
输出(请使用标准输入、输入,不要读写文件)
按递增顺序,输出集合的元素,每行输出一个元素。
样例输入1 | 样例输出1 | 样例输入2 | 样例输出2 |
5 | 9 | 50 | 1 81 243 |
#include<stdio.h>
#include<math.h>
main()
{
unsigned long n = 0,t = 0,k = 0;
double c[100];
printf("请输入一个正整数n(1<n<=4000000000)/n");
scanf("%ld",&n);
//单独的第k个元素排在2的(k-1)次幂 加1的位置
//如1-〉2 ,3-〉3,9-〉5,27-〉9,……
do
{
t=(long)(log10(n - 1)/log10(2)) + 1; //求子集中最大的元素在集合T中的位置
c[k++]=pow(3,t-1); //第t个元素为3的(t-1)次幂
n=n-pow(2,t-1);
}while(n>1);//第1位永远是空集,所以条件要大于1
for(int i=k-1;i>=0;i--)
printf("%1.lf/n",c[i]);
}