#P1959. Darts
Darts
题目描述:
背景
许多国家(包括德国)都有一种奇特的传统,那就是向圆形的扁平靶投掷小箭(通常,这些小箭被称为飞镖,这项游戏也叫飞镖游戏)。
在飞镖游戏中,靶标是一个扁平的圆形,它被划分成了扇形区域和环形区域。扇形区域从 到 编号,环形区域则被称为双倍环或三倍环(见图 5)。靶板的中心部分被称为靶心,它又进一步细分为内圈部分(真正的靶心)和外圈部分(称为单倍靶心,见图 5)。
玩家们轮流朝靶板投掷飞镖。他们的得分取决于飞镖所命中的区域。如果命中编号为 的扇形区域中的双倍环,得分就是 分。命中三倍环的话,得分则是相应扇形区域分数的 倍。靶心的内圈部分计 分,外圈部分计 分。每一轮中,玩家要向飞镖靶投掷 支飞镖,其得分就是在这一轮中所有命中飞镖靶上编号区域的飞镖得分总和。
问题
你的朋友们昨天玩了飞镖,他们比赛的得分还写在你房间的黑板上。通过查看这些得分,你想知道每个玩家是如何投掷飞镖的,以及他们可能命中了飞镖靶的哪些区域。你需要编写一个程序,当给定一轮的得分时,重构出三支飞镖命中飞镖靶的可能的不同组合的数量,且不考虑飞镖投掷的顺序。
举个例子,考虑一个玩家的总得分为 分的情况。这可能是以下几种方式产生的:
3 = 0 + 0 + 1*3 one dart hits slice 3
3 = 0 + 0 + 3*1 one dart hits slice 1 in treble ring
3 = 0 + 1*1 + 1*2 one dart hits slice 1 and one dart hits slice 2
3 = 0 + 1*1 + 2*1 one dart hits slice 1 and one dart hits slice 1 in double ring
3 = 1*1 + 1*1 + 1*1 all three darts hit slice 1
由此得到的可能的不同组合的总数是 种。 一个更复杂些的例子是得分为 分的情况:
9 = 0 + 0 + 1*9 one dart hits slice 9
9 = 0 + 0 + 3*3 one dart hits slice 3 in treble ring
9 = 0 + 1*1 + 1*8 one dart hits slice 1 and one dart hits slice 8
9 = 0 + 1*1 + 2*4 one dart hits slice 1 and one dart hits slice 4 in double ring
...
9 = 0 + 3*2 + 1*3 one dart hits slice 2 in treble ring and one dart hits slice 3
9 = 1*1 + 1*1 + 1*7 two darts hit slice 1 and one dart hits slice 7
...
9 = 2*1 + 3*1 + 2*2 one dart hits slice 1 in double ring, one dart hits slice 1 in treble ring and one dart hits slice 2 in double ring
9 = 1*3 + 1*3 + 1*3 three darts hit slice 3
9 = 1*3 + 1*3 + 3*1 two darts hit slice 3 and one dart hits slice 1 in treble ring
9 = 1*3 + 3*1 + 3*1 one dart hits slice 3 and two darts hit slice 1 in treble ring
9 = 3*1 + 3*1 + 3*1 three darts hit slice 1 in treble ring
组合的数量是多少呢?请编写一个程序来找出答案。
输入:
第一行包含测试用例的数量。
对于每个测试用例,你会得到一个飞镖得分,它是单独一行的一个正整数。
输出:
对于每个测试用例的输出,首先是包含 “Scenario #i:” 的一行,其中 是从 开始的测试用例编号。然后单独一行打印出飞镖得分可能的组合数量。每个测试用例的输出最后以一个空行结束。
输入数据1
2
3
9
输出数据1
Scenario #1:
5
Scenario #2:
41
来源:
2002 年德国达姆施塔特工业大学编程竞赛