C语言程序设计每日一练(1)
探索数字组合的奇妙世界:如何生成所有独特的三位数
当我们想要探索由1、2、3、4这四个数字能组成多少个不同的三位数时,我们实际上是在解决一个排列组合的问题。这不仅是一个数学问题,也是编程领域经常遇到的挑战,特别是在数据处理、密码学或算法设计中。
问题分析
为了解决这个问题,我们首先要理解题目的核心要求:
- 互不相同:每个数字在三位数中只能出现一次。
- 无重复数字:任意两个不同的三位数之间,不能出现完全相同的数字组合。
考虑到这两个要求,我们可以通过三重循环来生成所有可能的三位数组合。每一位(百位、十位、个位)都可以是1、2、3、4中的任意一个数字,但我们需要确保在同一组合中,这三个位置的数字各不相同。
程序解读
下面的C语言程序就是基于上述思路编写的:
#include <stdio.h> int main()
{ int i, j, k; printf("\n"); for (i = 1; i < 5; i++) /* 百位 */ for (j = 1; j < 5; j++) /* 十位 */ for (k = 1; k < 5; k++) /* 个位 */ { if (i != k && i != j && j != k) /* 确保i、j、k三位互不相同 */ printf("%d%d%d\n", i, j, k); /* 输出组合 */ } return 0;
}
在这段代码中,我们使用了三重循环来遍历1到4这四个数字。if语句确保三个位置上的数字都是不同的,只有满足这个条件,才会输出这个组合。
输出结果与总结
运行这段程序,你会得到所有由1、2、3、4组成的、无重复数字的三位数。这些数字在密码学、统计学和数据科学中都有重要的应用。通过编程,我们不仅可以解决这类具体的数学问题,还可以更深入地理解排列组合的原理,并将其应用于更广泛的领域。
此外,这个程序也展示了循环和条件语句在编程中的基础而重要的应用。对于初学者来说,这是一个很好的练习和理解编程基础概念的机会。通过简单的修改,这个程序还可以用于解决其他类似的问题,比如生成所有可能的、由特定数字组成的其他长度的数字串等。
总的来说,这个程序不仅解决了一个具体的数学问题,还展示了编程在解决排列组合问题中的灵活性和实用性。通过编写和执行这样的程序,我们可以更深入地理解数字、编程和逻辑之间的关系。
算法详解
-
初始化:算法开始时,我们定义了三个循环变量
i,j,k,分别代表三位数的百位、十位和个位数字。 -
三重循环:
- 外层循环(
i循环)遍历1到4,代表三位数百位上的数字。 - 中间循环(
j循环)同样遍历1到4,代表十位数。 - 内层循环(
k循环)也是遍历1到4,代表个位数。
- 外层循环(
-
条件判断:在每次内层循环中,都会检查
if (i != k && i != j && j != k)这个条件,以确保三个位置上的数字互不相同。这是满足题目要求“互不相同且无重复数字”的关键步骤。 -
输出结果:如果满足上述条件,则输出这个三位数。注意,在输出时,我们直接将
i,j,k连接成一个数字输出,而不是以逗号分隔。因此,在实际代码中,应该将printf("%d,%d,%d\n",i,j,k);修改为printf("%d%d%d\n",i,j,k);以避免输出错误。
算法复杂度
-
时间复杂度:
-
由于我们有三重循环,每重循环最多执行4次(数字1到4),所以总的时间复杂度是O(n^3),在这里n=4,因此是O(64)。但实际上,因为数字是固定的(1,2,3,4),所以时间复杂度可以看作是常量的,即O(1)。然而,如果问题扩展到更大的数字范围,时间复杂度将随数字数量的增加而立方级增长。
-
空间复杂度:
-
此算法仅使用了几个整型变量来存储当前的数字组合,并没有使用额外的数据结构来存储结果或中间数据。因此,其空间复杂度是O(1),即常量空间。
优化与扩展
虽然这个算法对于当前的问题是有效的,但如果我们需要处理更大的数字范围或更多的位数,它可能就会变得非常低效。在这种情况下,我们可以考虑使用更高效的算法,如回溯法或动态规划,来生成所有可能的组合。
此外,如果我们只需要知道有多少种组合而不是具体的组合是什么,我们可以使用组合数学中的排列公式来计算。对于这个问题,由于我们有4个不同的数字,并且我们要选择3个来组成一个三位数,所以总的排列数就是4的阶乘除以(4-3)的阶乘,即4!/1! = 24种不同的组合。
相关文章:
C语言程序设计每日一练(1)
探索数字组合的奇妙世界:如何生成所有独特的三位数 当我们想要探索由1、2、3、4这四个数字能组成多少个不同的三位数时,我们实际上是在解决一个排列组合的问题。这不仅是一个数学问题,也是编程领域经常遇到的挑战,特别是在数据处…...
Spring 统一功能处理
前言:为什么要有统一功能处理? 我们在进行数据的返回的时候,不同的方法返回的数据类型也不一样,但是我们前端有时候期望拿到是一样的数据类型。就好比买菜的时候期望最后是用一个大的塑料袋进行包装的。 那么我们可以在HTTP进行响应的之前,做一些事情,让我们返回的数据统…...
【软设】知识点速记2
1.安全性、可靠性与系统性能评测基础知识 1.1计算机和网络安全 1.1.1 安全威胁 网络安全威胁是指任何可能损害网络系统的保密性、完整性和可用性的因素或行为。这些威胁可能来自内部或外部,包括恶意软件、信息泄露、DDoS攻击、社交工程、网络钓鱼、黑客攻击和资源滥用等多种…...
激光雷达和相机的联合标定工具箱[cam_lidar_calibration]介绍
激光雷达和相机的联合标定工具箱[cam_lidar_calibration]介绍 写在前面安装过程调试过程标定成功可视化展示 写在前面 激光雷达和相机联合标定工具 论文地址:https://ieeexplore.ieee.org/stamp/stamp.jsp?tp&arnumber9564700 github地址: https://github.com…...
ML.NET(二) 使用机器学习预测表情分析
这个例子使用模型进行表情分析: 准备数据: happy,sad 等; using Common; using ConsoleApp2; using Microsoft.ML; using Microsoft.ML.Data; using System.Diagnostics; using static Microsoft.ML.Transforms.ValueToKeyMappingEstimator;…...
YOLOv9最新改进系列:YOLOv9改进之添加注意力-ContextAggregation,有效涨点!!!
YOLOv9最新改进系列:YOLOv9改进之添加注意力-ContextAggregation,有效涨点!!! YOLOv9原文链接戳这里,原文全文翻译请关注B站Ai学术叫叫首er B站全文戳这里! 详细的改进教程以及源码ÿ…...
【数据结构】初识数据结构与复杂度总结
前言 C语言这块算是总结完了,那从本篇开始就是步入一个新的大章——数据结构,这篇我们先来认识一下数据结构有关知识,以及复杂度的相关知识 个人主页:小张同学zkf 若有问题 评论区见 感兴趣就关注一下吧 目录 1.什么是数据结构 2.…...
子域名是什么?有什么作用?
在互联网世界中,域名是我们访问网站的关键。每一个公司的网站都需要拥有自己的域名,其中有些大型公司的网站还不止一个域名,除了主域名外还拥有子域名。有些人感到非常困惑,不知道子域名是什么。其实子域名也就是平时所说的二级域…...
学习 Rust 的第一天:基础知识
如果你对 Rust 一无所知,那我来解释一下。 “Rust 是一种系统编程语言,其优先考虑性能、内存安全和零成本抽象。” 你好,世界 我之前研究过 Rust,并且对 Java、C、C 和 Python 的基本编程概念有相当了解。 今天,我…...
电商技术揭秘七:搜索引擎中的SEO关键词策略与内容优化技术
文章目录 引言一、关键词策略1.1 关键词研究与选择1. 确定目标受众2. 使用关键词研究工具3. 分析搜索量和竞争程度4. 考虑长尾关键词5. 关键词的商业意图6. 创建关键词列表7. 持续监控和调整 1.2 关键词布局与密度1. 关键词自然分布2. 标题标签的使用3. 首次段落的重要性4. 关键…...
系统开发实训小组作业week7 —— 优化系统开发计划
目录 1. 建立规则,仪式,流程,模式 2. 给好行为正面的反馈 3. 明确指出不合适的行为,必要时调整人员 在 “系统开发实训课程” 中,我们小组的项目是 “电影院会员管理系统” 。在项目的开发过程中,我们遇…...
golang的引用和非引用总结
目录 概述 一、基本概念 指针类型(Pointer type) 非引用类型(值类型) 引用类型(Reference Types) 解引用(dereference) 二、引用类型和非引用类型的区别 三、golang数据类型…...
2024认证杯数学建模B题思路模型代码
目录 2024认证杯数学建模B题思路模型代码:4.11开赛后第一时间更新,获取见文末名片 第十三届“认证杯”数学中国数学建模比赛赛后体会 2024认证杯数学建模B题思路模型代码:4.11开赛后第一时间更新,获取见文末名片 第十三届“认证杯”数学中国数学建模比…...
一种快速移植 OpenHarmony Linux 内核的方法
移植概述 本文面向希望将 OpenHarmony 移植到三方芯片平台硬件的开发者,介绍一种借助三方芯片平台自带 Linux 内核的现有能力,快速移植 OpenHarmony 到三方芯片平台的方法。 移植到三方芯片平台的整体思路 内核态层和用户态层 为了更好的解释整个内核…...
java的jar包jakarta.jakartaee-web-api和jakarta.servlet-api有什么区别
jakarta.jakartaee-web-api和jakarta.servlet-api都是Java EE(现在是 Jakarta EE)中的一部分,用于开发基于Java EE平台的Web应用程序。它们之间的区别在于以下几点: 命名空间: jakarta.servlet-api是Java EE 8之前版本…...
QT_day2
使用手动连接,将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中,在自定义的槽函数中调用关闭函数 将登录按钮使用qt4版本的连接到自定义的槽函数中,在槽函数中判断ui界面上输入的账号是否为"admin",密码是否为…...
Advanced RAG 02:揭开 PDF 文档解析的神秘面纱
编者按: 自 2023 年以来,RAG 已成为基于 LLM 的人工智能系统中应用最为广泛的架构之一。由于诸多产品的关键功能(如:领域智能问答、知识库构建等)严重依赖RAG,优化其性能、提高检索效率和准确性迫在眉睫&am…...
Spring面试题pro版-1
Spring框架是由于软件开发的复杂性而创建的。Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅仅限于服务器端的开发。从简单性、可测试性和松耦合性角度而言,绝大部分Java应用都可以从Spring中受益。 Spring是什么…...
6 Reverse Linked List
分数 20 作者 陈越 单位 浙江大学 Write a nonrecursive procedure to reverse a singly linked list in O(N) time using constant extra space. Format of functions: List Reverse( List L ); where List is defined as the following: typedef struct Node *PtrToNo…...
【随笔】Git 高级篇 -- 相对引用2 HEAD~n(十三)
💌 所属专栏:【Git】 😀 作 者:我是夜阑的狗🐶 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询! 💖 欢迎大…...
《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》
引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...
大数据学习(132)-HIve数据分析
🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言Ǵ…...
C++使用 new 来创建动态数组
问题: 不能使用变量定义数组大小 原因: 这是因为数组在内存中是连续存储的,编译器需要在编译阶段就确定数组的大小,以便正确地分配内存空间。如果允许使用变量来定义数组的大小,那么编译器就无法在编译时确定数组的大…...
Yolov8 目标检测蒸馏学习记录
yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...
20个超级好用的 CSS 动画库
分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码,而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库,可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画,可以包含在你的网页或应用项目中。 3.An…...
android RelativeLayout布局
<?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"android:gravity&…...
libfmt: 现代C++的格式化工具库介绍与酷炫功能
libfmt: 现代C的格式化工具库介绍与酷炫功能 libfmt 是一个开源的C格式化库,提供了高效、安全的文本格式化功能,是C20中引入的std::format的基础实现。它比传统的printf和iostream更安全、更灵活、性能更好。 基本介绍 主要特点 类型安全:…...
聚六亚甲基单胍盐酸盐市场深度解析:现状、挑战与机遇
根据 QYResearch 发布的市场报告显示,全球市场规模预计在 2031 年达到 9848 万美元,2025 - 2031 年期间年复合增长率(CAGR)为 3.7%。在竞争格局上,市场集中度较高,2024 年全球前十强厂商占据约 74.0% 的市场…...
项目进度管理软件是什么?项目进度管理软件有哪些核心功能?
无论是建筑施工、软件开发,还是市场营销活动,项目往往涉及多个团队、大量资源和严格的时间表。如果没有一个系统化的工具来跟踪和管理这些元素,项目很容易陷入混乱,导致进度延误、成本超支,甚至失败。 项目进度管理软…...
