4
回答
【双色球】在数组里排除连续的号码
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   
int[] a = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33 };

当取6个数时有1107568个可能.结果为: 
[1, 2, 3, 4, 5, 6]
 [1, 2, 3, 4, 5, 7]
 [1, 2, 3, 4, 5, 8]
。。。 。。。
由于4连号,5连号,6连号基本不可能,有啥好的办法能排除掉。
举报
Lukerr
发帖于4年前 4回/200阅
共有4个答案 最后回答: 4年前
我朝不是经常出现奇葩的中奖号么, 连号小意思……    没必要排除, 非要排除的话………………………… 我不会
--- 共有 1 条评论 ---
Lukerr闲的蛋疼,给一朋友写的,这就是他的需求。 4年前 回复
你一个一个随机取就ok~你能取到 由于4连号,5连号,6连号基本不可能
--- 共有 2 条评论 ---
你要爪子回复 @look-vip : 我的意思是,按照双色球的取法,取。要不然你这东西没用了 4年前 回复
Lukerr取随机数也很有可能取到多连号的。 4年前 回复
typedef std::list<int> record;

typedef std::list<record> records;

struct funcCounter
{
	funcCounter()
		: nCount(0), nStart(-1)
	{

	}

	bool operator()(const int& v)
	{
		if (nStart+1 == v)
		{
			nCount++;
			nStart++;

			if (nCount >= 3)
			{
				return true;
			}

			return false;
		}

		nCount = 0;
		nStart = v;
		return false;
	}

	int nCount;
	int nStart;
};

bool needRemove(record& v1)
{
	return std::count_if(v1.begin(), v1.end(), funcCounter());
}

int main()
{
	records data;

	record sing;
	sing.push_back(1);
	sing.push_back(2);
	sing.push_back(4);
	sing.push_back(5);
	sing.push_back(6);
	sing.push_back(7);

	record sing2;
	sing2.push_back(1);
	sing2.push_back(3);
	sing2.push_back(4);
	sing2.push_back(5);
	sing2.push_back(7);
	sing2.push_back(8);

	data.push_back(sing);
	data.push_back(sing2);
	data.erase(std::remove_if(data.begin(), data.end(), needRemove), data.end());
	return 0;
}
顶部