【双色球】在数组里排除连续的号码

Lukerr 发布于 2013/09/13 10:34
阅读 217
收藏 0
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连号基本不可能,有啥好的办法能排除掉。
加载中
0
子木007
子木007
我朝不是经常出现奇葩的中奖号么, 连号小意思……    没必要排除, 非要排除的话………………………… 我不会
Lukerr
Lukerr
闲的蛋疼,给一朋友写的,这就是他的需求。
0
你要爪子
你要爪子
你一个一个随机取就ok~你能取到 由于4连号,5连号,6连号基本不可能
你要爪子
你要爪子
回复 @look-vip : 我的意思是,按照双色球的取法,取。要不然你这东西没用了
Lukerr
Lukerr
取随机数也很有可能取到多连号的。
0
斯诺登
斯诺登
先排序,然后一次遍历,两两相减,差值出现连续4个1,就是4连号,连续5个1就是5连号。。。
0
a
autocoder
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;
}
返回顶部
顶部