问题描述
小M面对一组从 1 到 9 的数字,这些数字被分成多个小组,并从每个小组中选择一个数字组成一个新的数。目标是使得这个新数的各位数字之和为偶数。任务是计算出有多少种不同的分组和选择方法可以达到这一目标。
numbers
: 一个由多个整数字符串组成的列表,每个字符串可以视为一个数字组。小M需要从每个数字组中选择一个数字。
例如对于[123, 456, 789]
,14个符合条件的数为:147 149 158 167 169 248 257 259 268 347 349 358 367 369
。
#include <iostream>
#include <vector>
#include<string>
int solution(std::vector<int> numbers) {
// Please write your code here
long long evenCount = 0; // 记录偶数选择的组合数
long long oddCount = 0; // 记录奇数选择的组合数
// 初始情况下,没有任何选择,所以组合数为0
evenCount = 1; // 初始化为1,因为至少有一种选择(即不选择任何数字)
for (int num : numbers) {
int even = 0, odd = 0;
std::string strNum = std::to_string(num);
// 统计当前数字组中的偶数和奇数
for (char ch : strNum) {
if ((ch - '0') % 2 == 0) {
even++;
}
else {
odd++;
}
}
// 更新组合数
long long newEvenCount = evenCount * even + oddCount * odd; // 偶数和偶数的组合 + 奇数和奇数的组合
long long newOddCount = evenCount * odd + oddCount * even; // 偶数和奇数的组合
evenCount = newEvenCount;
oddCount = newOddCount;
}
// 返回符合条件的组合数(偶数和的组合)
return evenCount; // 返回偶数和的组合数
//return -1;
}
int main() {
// You can add more test cases here
std::cout << (solution({123, 456, 789}) == 14) << std::endl;
std::cout << (solution({123456789}) == 4) << std::endl;
std::cout << (solution({14329, 7568}) == 10) << std::endl;
return 0;
}
后记:才反应过来,字节青训入营题目前只能交python和Java,难怪上面 显示我一题也没刷,要细心,学习别拖延,截至日期快到了——
def solution(numbers):
even_count = 0 # 记录偶数选择的组合数
odd_count = 0 # 记录奇数选择的组合数
# 初始情况下,没有任何选择,所以组合数为0
even_count = 1 # 初始化为1,因为至少有一种选择(即不选择任何数字)
for num in numbers:
even = 0
odd = 0
str_num = str(num)
# 统计当前数字组中的偶数和奇数
for ch in str_num:
if int(ch) % 2 == 0:
even += 1
else:
odd += 1
# 更新组合数
new_even_count = even_count * even + odd_count * odd # 偶数和偶数的组合 + 奇数和奇数的组合
new_odd_count = even_count * odd + odd_count * even # 偶数和奇数的组合
even_count = new_even_count
odd_count = new_odd_count
# 返回符合条件的组合数(偶数和的组合)
return even_count # 返回偶数和的组合数
# 测试用例
if __name__ == "__main__":
print(solution([123, 456, 789]) == 14) # 应输出 True
print(solution([123456789]) == 4) # 应输出 True
print(solution([14329, 7568]) == 10) # 应输出 True
标签:even,count,数字,组合,奇数,偶数,求偶,分组,odd
From: https://blog.csdn.net/2301_79218588/article/details/143217422