[西门子] 2024年1月8日,每日花费一分钟练习C语言

[复制链接]
查看104 | 回复0 | 2024-6-28 08:02:20 | 显示全部楼层 |阅读模式
>学习工控知识,就来工控小新


农历十一月十一日   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 ... 每日持续更新中


发现“分享”“赞”了吗,戳我看看吧


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册哦

x
您需要登录后才可以回帖 登录 | 注册哦

本版积分规则