#P1541. Dart-a-Mania
Dart-a-Mania
描述 飞镖游戏有很多变化。其中一种变体是 301 游戏。在 301 游戏中,每个玩家的分数都是 301(因此得名)。每个玩家依次投掷三个飞镖来得分,这些分数会从玩家的当前分数中减去。例如,如果玩家的当前分数为 272,而三个飞镖得分为 55,则新分数将为 217。每掷出的飞镖都可能击中飞镖盘上编号在 1 到 20 之间的区域。(值 0 表示玩家完全错过了飞镖靶或选择不投掷飞镖。击中这些区域之一的飞镖将获得飞镖靶上打印的数字、打印数字的两倍或打印数字的三倍。例如,玩家投掷一支飞镖击中标有 17 的区域之一,可以获得 17、34 或 51 分。用一个飞镖得分的第三种方法是击中价值 50 分的 BULLS EYE。(没有规定将靶心分数加倍或三倍。
第一个将分数降低到零的玩家赢得游戏。如果玩家的得分高于他/她的当前分数,则称该玩家已“爆牌”,新分数将返回到最后的当前分数。
问题陈述
给定玩家的当前飞镖分数,编写一个程序来计算投掷三个飞镖时分数的所有可能组合和排列,这将使玩家的分数正好为零(意味着玩家赢得了比赛)。程序的输出应包含找到的组合数和排列数。
例如,如果玩家的当前分数是 2,那么将有两个组合和六个排列。组合是:1) 任意一个飞镖得分为 2,其他两个飞镖得分为 0,以及 2) 两个不同的飞镖得分为 1,第三个飞镖得分为 0。完成此作的顺序并不重要。
对于排列,顺序很重要;因此,六种排列方式如下:
Dart 1: 2 0 0 1 1 0
Dart 2: 0 2 0 1 0 1
Dart 3: 0 0 2 0 1 1
(注意:该程序并未打印出实际的排列和组合,只打印出每个的总数。)
输入 输入包含一个整数列表(每个整数 <= 999),每行一个,代表多个玩家的当前分数。值为零或更小将表示输入文件的结束。
输出 对于输入文件中的每个正整数,将向 std 输出写入 2 或 3 行。
如果分数可以降低到 0,则您的程序应编写以下行:
得分 x 的组合数为 c。
得分 x 为 p 的排列数。
其中 x 是玩家的分数值,而 c 和 p 分别是可能的组合和排列总数。
如果无法将玩家的分数降低到零,请写下这行:
x 的分数不能用三个飞镖来得出。
打印上述行后,您的程序应编写一行 70 个星号来分隔不同分数的输出。消息 “END OF OUTPUT” 应出现在输出文件的末尾。
输入数据 1
162
175
2
68
211
114
-100
输出数据 1
NUMBER OF COMBINATIONS THAT SCORES 162 IS 7.
NUMBER OF PERMUTATIONS THAT SCORES 162 IS 28.
**********************************************************************
THE SCORE OF 175 CANNOT BE MADE WITH THREE DARTS.
**********************************************************************
NUMBER OF COMBINATIONS THAT SCORES 2 IS 2.
NUMBER OF PERMUTATIONS THAT SCORES 2 IS 6.
**********************************************************************
NUMBER OF COMBINATIONS THAT SCORES 68 IS 187.
NUMBER OF PERMUTATIONS THAT SCORES 68 IS 1056.
**********************************************************************
THE SCORE OF 211 CANNOT BE MADE WITH THREE DARTS.
**********************************************************************
NUMBER OF COMBINATIONS THAT SCORES 114 IS 82.
NUMBER OF PERMUTATIONS THAT SCORES 114 IS 445.
**********************************************************************
END OF OUTPUT
源 1993 年美国中部