64匹马,8个赛道,要想选出前四名,不计时、稳定发挥的前提下至少需要跑几场?

我的想法大概是这样的:在绝对稳定发挥的前提下,如果我们班数学第一名的学霸在全级是第四名,那我们班其他人也无法进入前四名,就没有竞逐前四名的资格。

所以,初赛让马分为8小组各自赛跑,然后将小组第一名放在一起跑第九场。

然后按小组第一名在第九场的排名进行小组编号,则第五组和之后的小组都没有第十场的参赛资格。

第四组第一名有参赛资格(上限全场第四名),但第四组后面其他马匹无参赛资格。

依次类推,

第三组只有一二名有参赛资格(上限按顺序对应全场第三四名);

第二组的一二三名有参赛资格(上限按顺序对应全场第二三四名);

第一组的一二三四名有参赛资格(上限按顺序对应全场前四名)。

由于第一组第一名已经确认为全场第一,故而提前夺冠,后面的马匹共计九匹,随便取出八匹进行第十场,淘汰后五位再与剩下一匹进行第十一场加以确定。

所以一共要跑十一场。

用js来写的话就好像下面这样:

function horseSort() {
	let arr = [];//二维数组分配八场初赛
	let arr0 = [];//64个数字
	for (let i = 0; i < 64; i++) {
		arr0[i] = i + 1;
	}
	for (let i = 0; i < 8; i++) {
		arr[i] = [];
		for (let j = 0; j < 8; j++) {
			arr[i][j] = arr0.splice(Math.floor(Math.random() * arr0.length), 1)[0];
		}
		arr[i].sort(function (a, b) {
			return a - b
		}); //分配马匹并顺便跑完八场初赛。
	}
	//console.log(arr);
	let arr9 = [];//第九场,把初赛第一名全部分配进来。
	for (let i = 0; i < 8; i++) {
		arr9[i] = [i, arr[i][0]]; //分配第九场,第一个元素是记载这匹马属于初赛哪一组。
	}
	arr9.sort(function (a, b) {
		return a[1] - b[1]
	}); //跑完第九场。
	//console.log(arr9);
	//准备工作完毕,开始第十场到第十一场,为了方便这里用一场跑完,考虑所有状况的话,234名只可能是这9匹的其中一匹,实际比赛可以分两场去跑。
	let arr10 = [arr[arr9[0][0]][1], arr[arr9[0][0]][2], arr[arr9[0][0]][3], arr[arr9[1][0]][0], arr[arr9[1][0]][1], arr[arr9[1][0]][2], arr[arr9[2][0]][0], arr[arr9[2][0]][1], arr[arr9[3][0]][0]];
	arr10.sort(function (a, b) {
		return a - b
	});
	console.log(arr10);
}

最后只要输出的数组前三位是2,3,4就正确了。我运行了很多次,这个想法应该是正确的。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值