C语言经典100题---例001---组无重复数字的数

题目

C 练习实例001 - 组无重复数字的数 题目:有 1、2、3、4 四个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?

题目分析

题目要求用数字1、2、3、4组成互不相同且无重复数字的三位数。

这是一个排列问题,相当于从4个数字中选3个进行排列,计算排列的个数并列出所有可能。

数学计算:

  • 百位:4种选择(1,2,3,4)

  • 十位:3种选择(不能和百位重复)

  • 个位:2种选择(不能和百位、十位重复)

  • 总数:4 × 3 × 2 = 24个

C语言代码实现

cpp 复制代码
#include <stdio.h>

int main() 
{
    int i, j, k;  // i-百位,j-十位,k-个位
    int count = 0; // 计数器

    printf("由1、2、3、4组成的所有互不相同且无重复数字的三位数:\n");

    // 三重循环生成所有可能的组合
    for (i = 1; i <= 4; i++)            // 百位数字
    {           
        for (j = 1; j <= 4; j++)        // 十位数字
        {       
            for (k = 1; k <= 4; k++)    // 个位数字
            {   
                // 判断三个数字是否互不相同
                if (i != j && i != k && j != k) 
                {
                    printf("%d%d%d  ", i, j, k);
                    count++;

                    // 每行显示6个数字,便于查看
                    if (count % 6 == 0) 
                    {
                        printf("\n");
                    }
                }
            }
        }
    }

    printf("\n\n总共可以组成 %d 个互不相同且无重复数字的三位数。\n", count);

    return 0;
}

代码详细分析

变量说明

  • i:百位数字(1-4)

  • j:十位数字(1-4)

  • k:个位数字(1-4)

  • count:计数器,记录符合条件的数字个数

循环结构

  • 三层嵌套循环,每层循环1-4,生成所有可能的数字组合

  • 最外层循环控制百位,中间层控制十位,最内层控制个位

条件判断

  • if(i != j && i != k && j != k):确保三个位置的数字互不相同

  • 这是关键条件,排除重复数字的组合

输出格式化

  • 每行显示6个数字,提高可读性

  • 最后输出总个数

程序运行结果

cpp 复制代码
由1、2、3、4组成的所有互不相同且无重复数字的三位数:
123  124  132  134  142  143  
213  214  231  234  241  243  
312  314  321  324  341  342  
412  413  421  423  431  432  

总共可以组成 24 个互不相同且无重复数字的三位数。

扩展思考

  1. 时间复杂度:三重循环,复杂度为O(n³),n=4,总共64次循环,其中24次满足条件

  2. 优化方案:可以使用回溯算法或递归实现,特别是当数字范围较大时效率更高

  3. 通用化修改:如果需要处理更多数字或不同长度的数字,可以将代码参数化:

总结

这道题是经典的排列组合问题,通过三重循环和条件判断可以简单高效地解决。虽然对于大数字范围不是最优解,但对于小范围问题完全足够,且代码清晰易懂。

相关推荐
lzhdim14 小时前
SharpCompress:跨平台的 C# 压缩与解压库
开发语言·c#
嘿嘿嘿x314 小时前
Linux记录过程
linux·开发语言
默 语14 小时前
Records、Sealed Classes这些新特性:Java真的变简单了吗?
java·开发语言·python
止观止14 小时前
拥抱 ESNext:从 TC39 提案到生产环境中的现代 JS
开发语言·javascript·ecmascript·esnext
卷心菜狗14 小时前
Python进阶-深浅拷贝辨析
开发语言·python
时寒的笔记14 小时前
js逆向7_案例惠nong网
android·开发语言·javascript
Evand J14 小时前
【MATLAB例程】基于低精度IMU、GNSS的UAV初始航向(三维角度)校准的仿真,包含卡尔曼滤波、惯导解算与校正
开发语言·matlab·gnss·imu·卡尔曼滤波
feng_you_ying_li15 小时前
c++之哈希表的介绍与实现
开发语言·c++·散列表
网域小星球15 小时前
C 语言从 0 入门(十四)|文件操作:读写文本、保存数据持久化
c语言·开发语言·文件操作·fopen·fprintf
网域小星球15 小时前
C 语言从 0 入门(七)|字符数组与字符串完整精讲|VS2022 高质量实战
c语言·开发语言·字符串·vs2022·字符数组