1. 问题背景与需求分析
最近在整理C语言练习题时,遇到一个有趣的数字组合问题:如何用1-9这九个数字组成三个不重复的三位数,且每个数字只能使用一次。这个看似简单的题目实际上考察了多重编程思维,包括排列组合算法、数字处理技巧和逻辑优化能力。
在实际开发中,类似的需求并不少见。比如在游戏开发中生成随机道具组合,或者在安全领域创建一次性密码时,都需要处理不重复的数字组合问题。通过解决这个具体案例,我们可以掌握更通用的数字处理技巧。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 解题思路与算法设计
2.1 问题分解
首先明确题目要求:
- 使用数字1-9各一次
- 组成三个三位数
- 每个三位数都是完全平方数
- 最终结果按升序排列
2.2 完全平方数范围
三位数的完全平方数范围是10²到31²(即100-961)。但考虑到需要使用1-9不重复的数字,实际可用的平方数更有限。我们可以先列出所有三位数的完全平方数:
c复制int squares[] = {
100, 121, 144, 169, 196,
225, 256, 289, 324, 361,
400, 441, 484, 529, 576,
625, 676, 729, 784, 841,
900, 961
};
2.3 核心算法设计
采用三重循环遍历所有可能的平方数组合,检查是否满足以下条件:
- 三个数使用的数字不重复
- 总共使用了1-9每个数字各一次
3. 完整实现代码
c复制#include <stdio.h>
#include <stdbool.h>
bool checkDigits(int a, int b, int c) {
int used[10] = {0}; // 0-9的标记数组
// 检查第一个数
while(a > 0) {
int digit = a % 10;
if(digit == 0 || used[digit]) return false;
used[digit] = 1;
a /= 10;
}
// 检查第二个数
while(b > 0) {
