C语言统计可组成含单个大写字母的banana数量的代码问题排查
解决C语言统计含至少一个大写字母的“banana”组合数问题
核心需求是统计输入字符串中能组成多少满足以下条件的字符组:
- 每组包含1个B/b、3个A/a、2个N/n
- 每组中至少存在一个大写字母(B、A、N任意一个)
问题分析
你的函数始终返回0,大概率是以下原因之一:
- 仅统计完全匹配特定大小写的单词(比如只找"Banana"),而非按字母数量统计组合
- 未区分全小写组合与含大写的组合,直接返回了全小写的统计结果
- 字母数量统计逻辑错误,导致总组合数计算为0
解决思路
要得到正确结果,需分两步计算:
- 先算不限制大小写时,能组成的总banana组数(只看字母总数是否满足1B/b、3A/a、2N/n)
- 再算全小写的banana组数(仅用小写b、a、n组成的组数)
- 最终结果 = 总组数 - 全小写组数(这样剩下的就是至少含一个大写的组数)
修正后的代码
#include <stdio.h> #include <string.h> #include <limits.h> int count_banana_with_uppercase(const char *str) { // 分别统计大小写字母数量 int upper_B = 0, lower_b = 0; int upper_A = 0, lower_a = 0; int upper_N = 0, lower_n = 0; for (int i = 0; str[i] != '\0'; i++) { switch(str[i]) { case 'B': upper_B++; break; case 'b': lower_b++; break; case 'A': upper_A++; break; case 'a': lower_a++; break; case 'N': upper_N++; break; case 'n': lower_n++; break; default: break; } } // 计算总组合数(不限制大小写) int total_b = upper_B + lower_b; int total_a = upper_A + lower_a; int total_n = upper_N + lower_n; int total_groups = INT_MAX; total_groups = total_b < total_groups ? total_b : total_groups; total_groups = (total_a / 3) < total_groups ? (total_a / 3) : total_groups; total_groups = (total_n / 2) < total_groups ? (total_n / 2) : total_groups; // 计算全小写组合数 int lower_groups = INT_MAX; lower_groups = lower_b < lower_groups ? lower_b : lower_groups; lower_groups = (lower_a / 3) < lower_groups ? (lower_a / 3) : lower_groups; lower_groups = (lower_n / 2) < lower_groups ? (lower_n / 2) : lower_groups; // 返回非负结果 return (total_groups >= lower_groups) ? (total_groups - lower_groups) : 0; } // 测试用例 int main() { printf("%d\n", count_banana_with_uppercase("Banana")); // 输出1(含大写B) printf("%d\n", count_banana_with_uppercase("banana")); // 输出0(全小写) printf("%d\n", count_banana_with_uppercase("BANANAbanana")); // 输出1(总2组,扣除1组全小写) printf("%d\n", count_banana_with_uppercase("bAaNnA")); // 输出1(含大写A、N) return 0; }
代码关键点说明
- 分别统计大小写字母,才能准确区分全小写组合
- 用
INT_MAX作为初始最小值,逐步取各字母条件的最小值,得到每组的最大可能数量(比如1个B/b对应1组,3个A/a对应1组,取最小的那个就是总组数) - 最终结果做非负判断,避免极端情况(比如全小写组数意外大于总组数)
内容的提问来源于stack exchange,提问作者Irma Ibrović
相关产品推荐
相关产品推荐

