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

总结

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

相关推荐
冷雨夜中漫步5 小时前
Python快速入门(6)——for/if/while语句
开发语言·经验分享·笔记·python
HABuo6 小时前
【linux文件系统】磁盘结构&文件系统详谈
linux·运维·服务器·c语言·c++·ubuntu·centos
m0_736919107 小时前
C++代码风格检查工具
开发语言·c++·算法
2501_944934737 小时前
高职大数据技术专业,CDA和Python认证优先考哪个?
大数据·开发语言·python
黎雁·泠崖8 小时前
【魔法森林冒险】5/14 Allen类(三):任务进度与状态管理
java·开发语言
2301_763472469 小时前
C++20概念(Concepts)入门指南
开发语言·c++·算法
TechWJ9 小时前
PyPTO编程范式深度解读:让NPU开发像写Python一样简单
开发语言·python·cann·pypto
lly20240610 小时前
C++ 文件和流
开发语言
m0_7066532310 小时前
分布式系统安全通信
开发语言·c++·算法
寻寻觅觅☆10 小时前
东华OJ-基础题-104-A == B ?(C++)
开发语言·c++