C语言/数据结构动态规划求解:从每组数字中选一个数,使总和为偶数
问题描述小M面对一组数字字符串每个字符串由 0 到 9 的数字字符组成。每个字符串代表一个数字组组内的每个数字字符是一个独立的数字选项。小M需要从每个数字组中选择一个数字即从每个字符串中选择一个字符对应的数字然后将这些选出的数字按顺序组成一个新的数实际上我们只关心这些数字的和的奇偶性而不是组成的数本身。目标是使得所有选出的数字之和为偶数。请计算出有多少种不同的选择方法可以达到这一目标。注意每个字符串中的数字字符都是独立的选项例如字符串 123 表示该组有三个可选数字1、2、3。选择方法不同是指至少在一个组中选择了不同的数字。输入格式输入为一个列表numbers包含多个字符串。每个字符串仅由数字字符0-9组成长度至少为 1。列表长度至少为 1。输出格式输出一个整数表示满足条件的选择方法总数。程序代码#include stdio.h#include stdlib.h#include string.hint countEvenSumChoices(char** numbers, int numbersSize) {long long even 1, odd 0;for (int i 0; i numbersSize; i) {int len strlen(numbers[i]);int evenCount 0, oddCount 0;for (int j 0; j len; j) {int digit numbers[i][j] - 0;if (digit % 2 0) {evenCount;} else {oddCount;}}long long newEven even * evenCount odd * oddCount;long long newOdd even * oddCount odd * evenCount;even newEven;odd newOdd;}return even;}int main() {char* numbers[] {123, 456, 789};int numbersSize 3;printf(%d\n, countEvenSumChoices(numbers, numbersSize));return 0;}#include stdio.h #include stdlib.h #include string.h int countEvenSumChoices(char** numbers, int numbersSize) { long long even 1, odd 0; for (int i 0; i numbersSize; i) { int len strlen(numbers[i]); int evenCount 0, oddCount 0; for (int j 0; j len; j) { int digit numbers[i][j] - 0; if (digit % 2 0) { evenCount; } else { oddCount; } } long long newEven even * evenCount odd * oddCount; long long newOdd even * oddCount odd * evenCount; even newEven; odd newOdd; } return even; } int main() { char* numbers[] {123, 456, 789}; int numbersSize 3; printf(%d\n, countEvenSumChoices(numbers, numbersSize)); return 0; }运行结果

相关新闻