用c语言实现寻找获胜字符串问题 :用c语言实现寻找获胜字符串问题 M 个银行职员玩一个游戏,每人拿着一个长度为 3 的数字串(注意:长度小于三个 数字的,左边补 0.例如, 5 为 005)。每个银行职员手中的数字串,都制定了一定的奖励 或惩罚分数。作为一个玩家,假定你从集合{0,1,2,3,4,5,6,7,8,9}中选择 n 个数字组 成一个数字串。如果你的数字串中有银行职员的数字串,那么你会因此加分或减分。例 如,有两个银行职员,一个职员给数字串 356 奖励 20 分,另一个职员给数字串 678 惩 罚 10 分。你的数字串是 035674,因为你的数字串中有 356 和 674,所以得分是 20-10=10 分。得分最高的玩家赢得这局游戏。假如不止一个玩家获得最高分,那么数字串值最小 的玩家获胜。 现在,假如哈利波特挥舞他的魔杖,弄清楚所有银行职员保密的字符串及相应的分 值,即使有赫敏在他身边,要想获胜也不是一件容易的事情。所以他向你求助;给定字 符串长度,请编写程序,帮助他找到获胜的字符串。 输入: 输入有多组测试数据。 对每组测试数据,第一行有两个整数 m 和 n(1<=n<=1000),其中 m 是银行职员人数, n 是玩家的字符串长度。 接下来有 m 行,每行是一个银行职员的字符串,及相应的分值。 假设所有银行职员的字符串都是互不相同的。 输出: 对每组测试数据,输出一行,内容是找到的获胜字符串。数字之间没有空格。 输入样例 2 5 356 20 674 -10 输出样例: 00356
时间: 2024-04-02 19:35:48 浏览: 127
这道题可以使用贪心算法来解决。我们可以把每个银行职员的字符串看成一个节点,每个节点与其他节点之间的边的权重就是相应的分值。然后我们可以从一个数位开始,枚举这个数位可以取到的所有数字,然后对于每个数字,计算它与其他节点之间的边的权重之和,选出最大的和,然后把这个数字加入到我们正在构造的数字串中。重复这个过程,直到构造出了完整的数字串。最后得到的就是获胜的数字串。
以下是代码实现:
相关问题
用c语言实现寻找获胜字符串问题 M 个银行职员玩一个游戏,每人拿着一个长度为 3 的数字串(注意:长度小于三个 数字的,左边补 0.例如, 5 为 005)。每个银行职员手中的数字串,都制定了一定的奖励 或惩罚分数。作为一个玩家,假定你从集合{0,1,2,3,4,5,6,7,8,9}中选择 n 个数字组 成一个数字串。如果你的数字串中有银行职员的数字串,那么你会因此加分或减分。例 如,有两个银行职员,一个职员给数字串 356 奖励 20 分,另一个职员给数字串 678 惩 罚 10 分。你的数字串是 035674,因为你的数字串中有 356 和 674,所以得分是 20-10=10 分。得分最高的玩家赢得这局游戏。假如不止一个玩家获得最高分,那么数字串值最小 的玩家获胜。 现在,假如哈利波特挥舞他的魔杖,弄清楚所有银行职员保密的字符串及相应的分 值,即使有赫敏在他身边,要想获胜也不是一件容易的事情。所以他向你求助;给定字 符串长度,请编写程序,帮助他找到获胜的字符串。 输入: 输入有多组测试数据。 对每组测试数据,第一行有两个整数 m 和 n(1<=n<=1000),其中 m 是银行职员人数, n 是玩家的字符串长度。 接下来有 m 行,每行是一个银行职员的字符串,及相应的分值。 假设所有银行职员的字符串都是互不相同的。 输出: 对每组测试数据,输出一行,内容是找到的获胜字符串。数字之间没有空格。 输入样例 2 5 356 20 674 -10 输出样例: 00356
这道题可以使用贪心算法来解决。我们可以把每个银行职员的字符串看成一个节点,每个节点与其他节点之间的边的权重就是相应的分值。然后我们可以从一个数位开始,枚举这个数位可以取到的所有数字,然后对于每个数字,计算它与其他节点之间的边的权重之和,选出最大的和,然后把这个数字加入到我们正在构造的数字串中。重复这个过程,直到构造出了完整的数字串。最后得到的就是获胜的数字串。
以下是代码实现:
阅读全文