>学习工控知识,就来工控小新
农历十一月十一日 2024/1/ 8
往期推荐
2024年1月7日,每日花费一分钟练习C语言
2024年1月6日,每日花费一分钟练习C语言
每
日
一
练
/ Daily Exercises
给定两个整数 n和k,返回1...n中所有可能的个数的组合。
示例:
输入:n=4,k=2
输出:[[2,4],[3,4],[2,3],[1,2],[1,3],[1,4]
题目分析
首先,让我们分析一下题目的要求。给定两个整数n和k,我们需要返回1到n之间所有可能的k个数的组合。例如,如果n=4,k=2,那么所有可能的组合有:
[1,2], [1,3], [1,4],[2,3], [2,4], [3,4]
我们可以发现,这些组合有以下特点:
-每个组合中的元素都是不重复的,即不能出现[1,1]这样的组合。
-每个组合中的元素都是按照升序排列的,即不能出现[2,1]这样的组合。
-组合之间的顺序是无关紧要的,即[1,2]和[2,1]是同一个组合,只需要输出其中一个即可。
那么,如何用C语言实现这个功能呢?我们可以采用递归的思想,从1到n中依次选择一个数,然后在剩下的数中再选择k-1个数,直到k为0时,表示找到了一个组合,将其输出或保存。具体的步骤如下:
-定义一个函数,比如叫做combination,它接受四个参数:n, k, start,result。其中n和k是题目给定的两个整数,start是当前选择的起始位置,result是一个数组,用来存放当前已经选择的数。
-在函数中,首先判断k是否为0,如果是,表示已经找到了一个组合,将result数组中的元素输出或保存,然后返回。
-如果k不为0,表示还需要继续选择数,那么从start到n中依次遍历每个数,将其加入到result数组中,然后递归调用combination函数,将n,k-1, i+1, result作为参数传入。这样就表示在当前数的基础上,再从剩下的数中选择k-1个数,形成组合。
-在递归调用返回后,需要将result数组中的最后一个元素删除,以便进行下一次选择。这样就可以避免重复或错误的组合。
程序展示
基于以上的分析,我们可以用C语言编写如下的程序:
#include <stdio.h>// 定义一个常量,表示组合中的元素个数的最大值#define MAX 10
// 定义一个函数,用来输出或保存一个组合void print_combination(int result[], int k) { int i; printf("["); for (i = 0; i < k; i++) { printf("%d", result); if (i < k - 1) { printf(","); } } printf("]\n");}
// 定义一个函数,用来生成所有可能的组合void combination(int n, int k, int start, int result[]) { int i; // 如果k为0,表示已经找到了一个组合,输出或保存 if (k == 0) { print_combination(result, 2); // 修改这里,传入k的原始值 return; } // 如果k不为0,从start到n中依次选择一个数,加入到result中,然后递归调用 for (i = start; i <= n; i++) { result[k - 1] = i; combination(n, k - 1, i + 1, result); }}
// 主函数,测试用例int main() { int n = 4; int k = 2; int result[MAX]; combination(n, k, 1, result); return 0;}
程序测试
这个程序是在VC6.0的环境下运行的,输出结果如下:
[1,2]
[1,3]
[1,4]
[2,3]
[2,4]
[3,4]
源代码获取
#软件下载通道#
我用夸克网盘分享了「20240108」,点击链接即可保存。打开「夸克APP」,无需下载在线播放视频,畅享原画5倍速,支持电视投屏。
链接:https://pan.quark.cn/s/767f2c1c7545
(链接和提取码建议复制粘贴,手动输入容易出现错误)
| #支持一下#
分享整理,测试发布不易 如果您方便的话可以帮忙点一下↓↓
谢谢大家!
|
下期题目
整数转换英文表示
将非负整数 num 转换为其对应的英文表示。
示例 1:
输入:num =123
输出:“One Hundred TwentyThree
点赞加关注,学习不迷路
微信公众号|工控小新
EPLAN电气绘图、TIA博图基础 、CAD、C语言教学、单片机基础、三菱PLC ... 每日持续更新中
发现“分享”和“赞”了吗,戳我看看吧
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |