C语言实现两位不同数字的最小组合输出(仅用putchar)
解决方案
你的需求是输出0-9中两位不同数字的最小组合(仅保留较小的那个,如34/43只输出34)、升序排列且只能用putchar。现有代码的问题在于输出了重复数字组合(如00)和逆序组合(如34和43都输出),且使用了不符合要求的printf。
以下是修改后的代码:
#include <stdio.h> int main(void) { int a, b; int first = 1; // 标记是否为第一个输出组合,用于处理逗号 for (a = 0; a < 9; a++) // a最大到8,因为b要大于a,最大b为9 { for (b = a + 1; b < 10; b++) // b从a+1开始,保证a < b,只生成较小的组合 { if (!first) { putchar(','); // 非第一个组合,先输出逗号分隔 } first = 0; // 数字转字符输出:0-9的ASCII字符是连续的,'0'加数字即可得到对应字符 putchar('0' + a); putchar('0' + b); } } putchar('\n'); // 最后输出换行 return 0; }
关键修改说明
- 循环逻辑调整:内层循环从
a+1开始,确保b始终大于a,这样只会生成十位小于个位的组合,自动满足升序且不会重复输出逆序对 - 字符输出转换:利用ASCII码特性,
'0' + 数字可直接得到对应数字字符,适配putchar的输出要求 - 逗号处理:通过
first标记第一个组合,避免在开头输出逗号,同时保证后续组合间用逗号分隔,最后不会多出来多余逗号 - 移除
printf:全部替换为putchar,完全符合题目要求
内容的提问来源于stack exchange,提问作者Danny
相关产品推荐
相关产品推荐

