编程挑战(6)

组合算法:开一个数组,其下标表示1到m个数,数组元素的值为1表示其下标代表的数被选中,为0则没有选中。

 首先初始化,将数组前n个元素置1,表示第一个组合为前n个数;然后从左到右扫描数组元素值的“10”组合,找到第一个“10”组合后将其变为“01”组合,同时将其左边的所有“1”全部移动到数组的最左端;当第一个“1”移动到数组的m-n位置,即n个“1”全部移动到最右端时,就得到了最后一个组合。

       例如求5中选3的组合:

       1     1     1     0     0     //1, 2, 3

       1     1     0     1     0     //1, 2, 4

       1     0     1     1     0     //1, 3, 4

       0     1     1     1     0     //2, 3, 4

       1     1     0     0     1     //1, 2, 5

       1     0     1     0     1     //1, 3, 5

       0     1     1     0     1     //2, 3, 5

       1     0     0     1     1     //1, 4, 5

       0     1     0     1     1     //2, 4, 5

       0     0     1     1     1     //3, 4, 5

void output1(int value[], char* middle, int length)
{for(int i=0; i<length; i++){if(middle[i] == '1'){printf("%d ", value[i]);}}printf("\n");
}bool find10(char* middle, int M, int* index)
{bool find = false;for(int i=0; i<M; i++){	if (middle[i] == '1' && middle[i + 1] == '0'){*index = i;find = true;break;}}return find;
}void move1(char* middle, int index)
{int count = 0;for(int i=0; i<index; i++){if (middle[i] == '1'){swap(middle[count++], middle[i]);}}
}//从M 个数中取 N 个数的组合
void enumkind(int value[], int M, int N)
{char *middle = new char[M + 1];middle[M] = '\0';memset(middle, '1', N);memset(middle + N, '0', M - N);printf("%s: ", middle);output1(value, middle, M);int index = 0;while(find10(middle, M, &index)){swap(middle[index], middle[index+1]);move1(middle, index);printf("%s: ", middle);output1(value, middle, M);}delete middle;
}int _tmain(int argc, _TCHAR* argv[])
{int value[5] = {1,2,3,4,5};enumkind(value, sizeof(value)/sizeof(int), 4);getchar();return 0;
}


 

 

转载于:https://www.cnblogs.com/dyllove98/p/3186867.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/474189.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[编程启蒙游戏] 2. 奇偶数

文章目录1. 游戏前提2. 游戏目的3. python代码1. 游戏前提 孩子知道奇偶数是什么&#xff0c;不知道也没关系 还可以采用掰手指演示&#xff0c;伸出两个手指能配对&#xff0c;所有伸出来的手指都两两配对了&#xff0c;伸出来的手指个数就是偶数如果还有1个没有找到朋友的手…

进程间通信-Queue 消息队列 先进先出

Process之间有时需要通信&#xff0c;操作系统提供了很多机制来实现进程间的通信。 multiprocessing模块的Queue实现多进程之间的数据传递&#xff0c;Queue本身是一个消息列队程序 初始化Queue()对象时&#xff08;例如&#xff1a;qQueue()&#xff09;&#xff0c;若括号中没…

过压保护(1)

征一个简单、可靠的电源过压保护电路 http://www.amobbs.com/thread-5542005-1-1.html 防过压&#xff1a;过压之后TVS导通&#xff0c;电流由正极流经自恢复保险再流经TVS到负极&#xff0c;自恢复保险升温&#xff0c;阻值变大&#xff0c;相当于断开&#xff0c;等电流撤去&…

spring boot+thmyleaf ModelAndView页面传值

如上图所示&#xff0c;当我们从后台通过ModelAndView进行传值的时候&#xff0c; 一定要注意&#xff0c;千万不要向上图那样开头加上反斜杠&#xff0c;开头加反斜杠&#xff0c;系统会默认为相对路径&#xff0c; 虽然也能找到相应的视图&#xff08;html&#xff09;&#…

python中的进程, 线程

进程是操作系统分配资源的最小单位 线程是操作系统调度执行的最小单位 定义的不同 进程是系统进行资源分配的最小单位. 线程是进程的一个实体,是CPU进行调度的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(…

LeetCode 214. 最短回文串(字符串哈希)

文章目录1. 题目2. 解题1. 题目 给定一个字符串 s&#xff0c;你可以通过在字符串前面添加字符将其转换为回文串。 找到并返回可以用这种方式转换的最短回文串。 示例 1: 输入: "aacecaaa" 输出: "aaacecaaa"示例 2: 输入: "abcd" 输出: "…

转:c#委托事件实现窗体传值通信

C#实现Winform窗口间数据交互的三种方法介绍 2010-03-15 来自&#xff1a;CNBLOG 字体大小&#xff1a;【大 中 小】摘要&#xff1a;本文分别介绍C#实现Winform窗口间数据交互的三种方法&#xff1a;修改子窗体的构造函数、给窗体添加属性或方法、通过委托的方法&#xff0c…

python中的多线程-threading

python的thread模块是比较底层的模块&#xff0c;python的threading模块是对thread做了一些包装的&#xff0c;可以更加方便的被使用 创建多线程&#xff1a; from threading import Thread import time def sing(): for i in range(3): print("唱歌") time.sleep(…

LeetCode 1566. 重复至少 K 次且长度为 M 的模式

文章目录1. 题目2. 解题1. 题目 给你一个正整数数组 arr&#xff0c;请你找出一个长度为 m 且在数组中至少重复 k 次的模式。 模式 是由一个或多个值组成的子数组&#xff08;连续的子序列&#xff09;&#xff0c;连续 重复多次但 不重叠 。 模式由其长度和重复次数定义。 …

R语言的安装与配置

一、什么是 R 语言 R 编程语言被广泛应用在统计科学和商业领域。 在各种编程语言排名中 R 语言的排名都很靠前。 它是一款集成了数据操作、统计&#xff0c;以及可视化功能的优秀开源软件。免费&#xff0c;开源是 R 重要的特点。 二、什么是 RStudio RStudio 是用亍 R 编程的…

python中的多线程-共享全局变量

在一个进程内的所有线程共享全局变量&#xff0c;能够在不适用其他方式的前提下完成多线程之间的数据共享&#xff08;这点要比多进程要好&#xff09; 缺点就是&#xff0c;线程是对全局变量随意遂改可能造成多线程之间对全局变量的混乱&#xff08;即线程非安全&#xff09; …

R语言第一讲

一、R语言入门推荐 推荐四本材料书&#xff1a;R CookBook &#xff1a;hhtp&#xff1a;//www.cookbook-r.com/R in Action http://www.amazon.com/R-Action-Robert-Kabaccoff/dp/1935182390Ggplot2:Elegant Graphics for Data Analysis(User R):hhtp://www.amazon.com/ggplo…

LeetCode 1567. 乘积为正数的最长子数组长度

文章目录1. 题目2. 解题1. 题目 给你一个整数数组 nums &#xff0c;请你求出乘积为正数的最长子数组的长度。 一个数组的子数组是由原数组中零个或者更多个连续数字组成的数组。 请你返回乘积为正数的最长子数组长度。 示例 1&#xff1a; 输入&#xff1a;nums [1,-2,-…

python中的互斥锁

如果没有控制多个线程对同一资源的访问&#xff0c;对数据造成破坏&#xff0c;使得线程运行的结果不可预期。这种现象称为“线程不安全”。 线程同步解决问题: 系统调用t1&#xff0c;然后获取到num的值为0&#xff0c;此时上一把锁&#xff0c;即不允许其他现在操作num 对nu…

R语言第二讲

1、R语言包的概念 R提供了大量开箱即用的功能&#xff0c;但它最激动人心的一部分功能是通过可选模块的下载和安装 来实现的。目前有2500多个①称为包&#xff08;package&#xff09;的用户贡献模块可从 http://cran.r-project.org/ web/packages 下载。这些包提供了横跨各种…

LeetCode 1568. 使陆地分离的最少天数(DFS)

文章目录1. 题目2. 解题1. 题目 给你一个由若干 0 和 1 组成的二维网格 grid &#xff0c;其中 0 表示水&#xff0c;而 1 表示陆地。 岛屿由水平方向或竖直方向上相邻的 1 &#xff08;陆地&#xff09;连接形成。 如果 恰好只有一座岛屿 &#xff0c;则认为陆地是 连通的 &…

python中的非阻塞使用互斥锁

锁定方法acquire可以有一个blocking参数。 如果设定blocking为True&#xff0c;则当前线程会堵塞&#xff0c;直到获取到这个锁为止&#xff08;如果没有指定&#xff0c;那么默认为True&#xff09; 如果设定blocking为False&#xff0c;则当前线程不会堵塞 from threading im…

在XML文件中定义动画(1)

① 打开Eclipse&#xff0c;新建Android工程② 在res目录中新建anim文件夹③ 在anim目录中新建一个myanim.xml(注意文件名小写)④ 加入XML的动画代码 <?xml version"1.0" encoding"utf-8"?><set xmlns:android"http://schemas.android…

LeetCode 1569. 将子数组重新排序得到同一个二叉查找树的方案数(DP)

文章目录1. 题目2. 解题1. 题目 给你一个数组 nums 表示 1 到 n 的一个排列。 我们按照元素在 nums 中的顺序依次插入一个初始为空的二叉查找树&#xff08;BST&#xff09;。 请你统计将 nums 重新排序后&#xff0c;统计满足如下条件的方案数&#xff1a;重排后得到的二叉查…

ADS1.2开发环境创建与简要介绍

ADS1.2下建立工程 1.运行ADS1.2集成开发环境&#xff08;CodeWarrior for ARM Developer Suite&#xff09;&#xff0c;点击File|New,在New对话框中&#xff0c;选择Project栏&#xff0c;其中共有7项&#xff0c;ARM Executable Image是ARM的通用模板。选中它即可生成ARM的执…