📅  最后修改于: 2023-12-03 15:35:15.782000             🧑  作者: Mango
TCS CodeVita 是由印度最大的信息技术服务公司Tata Consultancy Services(TCS)所举办的全球性编程挑战赛。自2012年开始,每年都有数以万计的学生和专业人士参加,是全球最具影响力和最具权威性的编程比赛之一。
TCS CodeVita 采用的是十分严谨和考验参赛者思维和编程能力的智力题目,其中最著名的就是“数字与忍者”这道题目。这道题目的描述是这样的:
小K是一名忍者,他只使用数字0-9和2个运算符+和*。其中,小K定了3种指令:将当前的数字+1,将当前的数字*2,以及将前面的一个数字与当前的数字代表的值相加。假如小K初始值是1,那么通过若干条指令,能否构造出数字为888的表达式呢?
这道题目看起来十分简单,但要想在规定的时间内解答出来却是一项极具挑战的任务。参赛者需要通过各种数据结构、算法和逻辑思维的运用,才能找到最优的解法。
queue = []
queue.append([1, '1', 0])
while queue:
num, exp, op = queue.pop(0)
if num == 888:
print(exp)
break
if num + 1 <= 888:
queue.append([num + 1, exp + '+1', 1])
if num * 2 <= 888:
queue.append([num * 2, exp + '*2', 2])
if op == 1 and num + last_num <= 888:
queue.append([num + last_num, exp + '+' + str(last_num), 3])
queue = []
queue.append([1, '1', 0])
while queue:
num, exp, op = queue.pop(0)
if num == 888:
print(exp)
break
if num < 888:
if num + 1 <= 888:
queue.append([num + 1, exp + '+1', 1])
if num * 2 <= 888:
queue.append([num * 2, exp + '*2', 2])
if op == 1 and num + last_num <= 888:
queue.append([num + last_num, exp+'+'+str(last_num), 3])
此外还可以做一些优化,比如记录下当前num的值,优化操作3的选取。
TCS CodeVita 不仅是一次全球性的编程挑战赛,更是一项能够锻炼参赛者思维和编程技能的极佳机会。数字与忍者这道题目,看似简单,实则不易,需要考验编程者的求数组、广度优先遍历、算法思维、剪枝优化等方面的知识与技能。