C语言代码填空:补全空缺实现三位a-c字符全组合逐字符输出
三位a~c字符全组合C代码补全方案
空缺补全内容
- (1) 处填写:
s[n - 1] = 'a' - (2) 处填写:
n - 2 - (3) 处填写:
++s[j] > 'c'
逻辑说明
代码通过模拟三进制进位逻辑生成所有组合,数组下标0为最高位、下标2(n-1)为最低位:
- 初始组合为
aaa,总计循环3^3=27次覆盖所有组合- 每次循环先打印当前组合的三个字符,最低位(下标n-1)自增1
- 最低位自增后超过
'c'时,先将最低位重置为'a',再从次低位开始向前处理进位- 处理进位时当前位先自增1,若超过
'c'就重置为'a'继续向前处理,否则终止进位流程
优化提示
原代码逐行打印单个字符,若需要每个组合占一行,可将打印部分替换为:
printf("%s\n", s);
补全后完整可运行代码
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> #include <stdlib.h> #define n 3 int main() { char s[4] = { 'a', 'a', 'a', 0 }; int i, j, t; t = n * n * n; while (t--) { for (i = 0; i < n - 1; i++) printf("%1c\n", s[i]); printf("%1c\n", s[i]); if (++s[n - 1] > 'c') { s[n - 1] = 'a'; // (1)补全内容 for (j = n - 2; j >= 0; j--) // (2)补全内容 { if (++s[j] > 'c') // (3)补全内容 s[j] = 'a'; else break; } } } return 0; }
内容的提问来源于stack exchange,提问作者adirk1
相关产品推荐
相关产品推荐

