用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 09:35:48 浏览: 48
这道题可以使用贪心算法来解决。我们可以把每个银行职员的字符串看成一个节点,每个节点与其他节点之间的边的权重就是相应的分值。然后我们可以从一个数位开始,枚举这个数位可以取到的所有数字,然后对于每个数字,计算它与其他节点之间的边的权重之和,选出最大的和,然后把这个数字加入到我们正在构造的数字串中。重复这个过程,直到构造出了完整的数字串。最后得到的就是获胜的数字串。
以下是代码实现:
相关问题
c语言使用函数实现字符串部分控制:输入一个字符串t和一个正整数m
C语言使用函数实现字符串部分控制:
在C语言中,使用函数可以方便地实现对字符串的部分控制,例如输入一个字符串t和一个正整数m,可以使用函数截取字符串t的前m个字符并输出。
首先,可以定义一个名为substring的函数,它需要接收两个参数:字符串t和正整数m。函数的返回值是截取后的字符串。
函数的实现过程是首先定义一个新的字符数组s,长度为m+1,然后使用for循环遍历t的前m位,将每个字符复制到s中。最后,再在s的最后一位添加'\0',表示字符串的结尾。
代码示例:
char* substring(char* t, int m){
char* s = (char*)malloc((m+1)*sizeof(char));
for(int i=0; i<m; i++){
*(s+i) = *(t+i);
}
*(s+m) = '\0';
return s;
}
其中,malloc函数用于动态分配内存,确保新建的字符数组s能够存储截取后的字符串。
调用函数时,只需要将原始字符串t和正整数m作为参数传入即可。函数会返回截取后的字符串,可以直接使用printf函数或puts函数输出。
例如:
char* t = "hello world";
int m = 5;
char* s = substring(t,m);
printf("%s",s);
// 输出结果为 "hello"
总之,C语言使用函数实现字符串部分控制非常简单,只需要动态分配内存,遍历原始字符串并复制到新的字符数组中即可。这种方式可以方便地实现字符串的部分控制,并在需要的时候快速满足需求。
请用C语言实现两个字符串的比较(不能使用库函数strcmp)
以下是用C语言实现两个字符串比较的代码,该代码不能使用库函数strcmp:
```c
#include <stdio.h>
int Compare(char str1[], char str2[]) {
int i = 0;
while (str1[i] != '\0' && str2[i] != '\0') {
if (str1[i] != str2[i]) {
return str1[i] < str2[i] ? -1 : 1;
}
i++;
}
if (str1[i] == '\0' && str2[i] == '\0') {
return 0;
} else {
return str1[i] == '\0' ? -1 : 1;
}
}
int main() {
char str1[80], str2[80];
printf("请输入字符串1:\n");
gets(str1);
printf("请输入字符串2:\n");
gets(str2);
if (Compare(str1, str2) == -1) {
printf("字符串1大于字符串2");
} else if (Compare(str1, str2) == 0) {
printf("字符串1等于字符串2");
} else {
printf("字符串1小于字符串2");
}
return 0;
}
```