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. 通用化修改:如果需要处理更多数字或不同长度的数字,可以将代码参数化:

总结

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

相关推荐
RuoZoe2 天前
重塑WPF辉煌?基于DirectX 12的现代.NET UI框架Jalium
c语言
祈安_5 天前
C语言内存函数
c语言·后端
郑州光合科技余经理7 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php
feifeigo1237 天前
matlab画图工具
开发语言·matlab
dustcell.7 天前
haproxy七层代理
java·开发语言·前端
norlan_jame7 天前
C-PHY与D-PHY差异
c语言·开发语言
多恩Stone7 天前
【C++入门扫盲1】C++ 与 Python:类型、编译器/解释器与 CPU 的关系
开发语言·c++·人工智能·python·算法·3d·aigc
QQ4022054967 天前
Python+django+vue3预制菜半成品配菜平台
开发语言·python·django
czy87874757 天前
除了结构体之外,C语言中还有哪些其他方式可以模拟C++的面向对象编程特性
c语言
遥遥江上月7 天前
Node.js + Stagehand + Python 部署
开发语言·python·node.js