蓝桥杯试题 算法训练 数字游戏

Posted Alex_996

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了蓝桥杯试题 算法训练 数字游戏相关的知识,希望对你有一定的参考价值。

题目链接


Ideas

首先想到的最暴力的方法就是全排列,枚举所有可能的排列情况,然后判断是否符合要求。

关于最后的累加和,经过分析其实可以发现结果等于各个元素乘以某个系数再相加的结果,而系数就是组合数comb(n - 1, i) * item[i]

不过这样只能过90%的测试样例,所以还需要进行剪枝。

  1. 可以发现,系数是可以提前计算出来的,并不需要每次check的时候再计算一遍,所以可以输入n之后直接就计算出来系数;
  2. check的时候如果判断当前累加和已经大于sum了,那么后面就没必要继续计算了。

Code

Python

from math import comb
from itertools import permutations


def check(item):
	res = 0
	for i in range(n):
		res += xi_shu[i] * item[i]
		if res > ans:
			return False
	return res == ans


def solve():
	for item in permutations(range(1, n + 1)):
		if check(item):
			print(' '.join(map(str, item)))
			return


if __name__ == '__main__':
	n, ans = map(int, input().split())
	xi_shu = [comb(n - 1, i) for i in range(n)]
	solve()

以上是关于蓝桥杯试题 算法训练 数字游戏的主要内容,如果未能解决你的问题,请参考以下文章

(蓝桥杯)试题 算法训练 数字反转

(蓝桥杯)试题 算法训练 数字统计

(蓝桥杯)试题 算法训练 递归输出数字

(蓝桥杯)试题 算法训练 递归输出数字三角形

(蓝桥杯)试题 算法训练 数据加密

蓝桥杯 ALGO-1005 数字游戏 python