赞
踩
我晕了~~还不行.....................
我把我的代码帖上来吧~~~
[CODE]
/*---------------------------------------------------------------
Description
集合的前N个元素:编一个程序,按递增次序生成集合M的最小的N个数,M的定义如下:
(1)数1属于M;
(2)如果X属于M,则Y=2*X+1和Z=3*x+1也属于M;
(3)此外再没有别的数属于M。
Input
n(b.in) (1≤n≤100)
Output
生成集合M的最小的N个数(b.out)
Sample Input
4
Sample Output
1 3 4 7
-----------------------------------------------------------------*/
#include
#include
#include
#include
using namespace std;
int main()
{
int num, i, j, k;
cin>>num;
int sum=0;
for( i=0; num > sum; i++ )
sum = sum + pow(2.0,double(i));
k=i-1;
int *p=new int [pow(2.0,double(k))];
vector< int > vec;
p[0]=1, vec.push_back(1);
for( i=1; i<=k; i++ )
{
for( j=pow(2,i)-1; j>=0; j--)
{
if( j % 2 !=0 )
p[j] = 3 * p[j/2] + 1;
else
p[j] = 2 * p[j/2] + 1;
vec.push_back( p[j] );
}
}
sort( vec.begin(), vec.end() );
for( i=0; i
cout<
cout<
return 0;
}
[/CODE]
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。