【题目部分】
编一个程序,按递增次序生成集合M的最小的N个数,M的定义如下:
(1)数1属于M;
(2)如果X属于M,则Y=2X+1和Z=3X+1也属于M;
(3)此外再没有别的数属于M。
(4)集合意味着重复的数只算一次。
输入
输入一个整数n.(n <= 10000)
输出
输出该集合的前n个整数。数的场宽设为8.每行五个数。
输入样例 1
3输出样例 1
1 3 4
在map中,元素按关键字排序,因此可以写出如下程序:
#include<bits/stdc++.h>
using namespace std;
int main()
{
map<int, int> mpl;
map<int, int>::iterator iter;
int n,a,i,js=0;
cin>>n;
mpl[1]=1;
for(iter=mpl.begin(),i=1;i<n;iter++,i++)
mpl[(iter->first)*2+1]=mpl[(iter->first)*3+1]=1;
for(iter=mpl.begin(),i=1;i<=n;iter++,i++)
{
cout<<setw(8)<<iter->first;
js++;
if(js%5==0)cout<<endl;
}
return 0;
}
也算比较简单的一题吧