【map】集合的前N个元素

这篇博客介绍了一个简单的C++程序,用于根据给定条件生成集合M的最小N个数。集合M由1开始,通过乘以2加1和乘以3加1的方式递增生成。程序利用了map容器的特性,按关键字排序并输出前N个数,每行显示五个数。这是一个基础的算法实现,适合初学者理解递归和集合生成问题。

【题目部分】

  编一个程序,按递增次序生成集合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;
}

 也算比较简单的一题吧

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值