C语言/数据结构动态规划求解:从每组数字中选一个数,使总和为偶数
2026/7/16 21:43:03 网站建设 项目流程

问题描述

小M面对一组数字字符串,每个字符串由 '0' 到 '9' 的数字字符组成。每个字符串代表一个数字组,组内的每个数字字符是一个独立的数字选项。小M需要从每个数字组中选择一个数字(即从每个字符串中选择一个字符对应的数字),然后将这些选出的数字按顺序组成一个新的数(实际上我们只关心这些数字的和的奇偶性,而不是组成的数本身)。

目标是使得所有选出的数字之和为偶数。请计算出有多少种不同的选择方法可以达到这一目标。

注意

  • 每个字符串中的数字字符都是独立的选项,例如字符串 "123" 表示该组有三个可选数字:1、2、3。
  • 选择方法不同是指:至少在一个组中选择了不同的数字。

输入格式

  • 输入为一个列表numbers,包含多个字符串。
  • 每个字符串仅由数字字符('0'-'9')组成,长度至少为 1。
  • 列表长度至少为 1。

输出格式

  • 输出一个整数,表示满足条件的选择方法总数。

程序代码

#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;

}

#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; }

运行结果

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询