(递归7)生成可重集的排列

题目
输入数组P,并按字典序输出数组A各元素的所有全排列

P数组:是存储基本数据的
A数组:是储存答案的
cur:当前需要确定的元素位置时存答案的位数的
c1,c2:做标记,if满足条件后再进行下次递归

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int a[1000];
int p[1000];
void print_permutation(int *p,int n,int *a,int cur);
int main(){int n,i;cin>>n;for(i=0;i<n;++i){cin>>p[i];}sort(p,p+n);print_permutation(p, n, a, 0);
}void print_permutation(int *p,int n,int *a,int cur){int i;if(cur==n) {for(int i=0;i<n;++i) printf("%d ",a[i]);printf("\n")    ;}else for(int i = 0; i < n; i++) { if(!i || p[i] != p[i-1]){//枚举的下标i应不重复,不遗漏的取遍所有p[i]值int c1 = 0,c2 = 0;  for(int j = 0; j < cur; j++) if(a[j] == p[i]) c1++;  for(int j = 0; j < n; j++) if(p[i] == p[j]) c2++;  if(c1 < c2) {    a[cur] = p[i];    print_permutation(p,n, a, cur+1);  } }}} 

题目:
给定一个由不同的小写字母组成的字符串,输出这个字符串的所有全排列。 我们假设对于小写字母有’a’ < ‘b’ < … < ‘y’ < ‘z’,而且给定的字符串中的字母已经按照从小到大的顺序排列。

输入
输入只有一行,是一个由不同的小写字母组成的字符串,已知字符串的长度在1到6之间。
输出
输出这个字符串的所有排列方式,每行一个排列。要求字母序比较小的排列在前面。字母序如下定义:

已知S = s1s2…sk , T = t1t2…tk,则S < T 等价于,存在p (1 <= p <= k),使得
s1 = t1, s2 = t2, …, sp - 1 = tp - 1, sp < tp成立。
样例输入
abc
样例输出
abc
acb
bac
bca
cab
cba

#include <iostream>
#include <algorithm> 
using namespace std;
int vis[10];
char ans[10];
int n; 
void print(char ans[],int n){for(int i=0;i<n;i++){cout<<ans[i];}cout<<endl;
}
void f(string s,int cur){//cur:当前需要确定的元素的位置 //  int n=s.length();if(cur==n) print(ans,n);else{for(int i=0;i<n;i++){//尝试在ans里面填上各种s[i] if(!vis[i]){//标记数组 vis[i]=1;ans[cur]=s[i];f(s,cur+1);vis[i]=0;}}}} int main(){string s;cin>>s;n=s.length();sort(s.begin(),s.end());f(s,0);return 0;
}

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

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

相关文章

利用next_permutation解答全排列问题

枚举所有排列的另一个方法是从字典序最小排列开始&#xff0c;不停调用“求下一个排列”的过 程。 全排列的个数A(N,N)(N)(N-1)…*2*1N! 下一个排列&#xff1a;通常按照升序顺序&#xff08;字典序&#xff09;获得下一个排列 stl next_permutation找下一个排列的算法 如…

根据大小分割大文本_场景文本检测—CTPN算法介绍

SIGAI特约作者&#xff1a;沪东三哥 原创声明:本文为SIGAI 原创文章&#xff0c;仅供个人学习使用&#xff0c;未经允许&#xff0c;不得转载&#xff0c;不能用于商业目的。其它机器学习、深度学习算法的全面系统讲解可以阅读《机器学习-原理、算法与应用》&#xff0c;清华大…

(贪心1)排队接水

问题描述   有n个人排队到r个水龙头去打水&#xff0c;他们装满水桶的时间t1、t2………..tn为整数且各不相等&#xff0c;应如何安排他们的打水顺序才能使他们总共花费的时间最少&#xff1f; 输入格式   第一行n&#xff0c;r (n<500,r<75)   第二行为n个人打…

vue 跳添加编辑页面传两个值_vue两个组件间值的传递或修改方式

1、可以用公共的父组件来实现&#xff1b;2、可以在store.js里面在设置公共变量&#xff1b;3、也可以用本地存储localStorage.setItem()和localStorage.getItem()&#xff0c;通过修改本地存储的值和获取修改后的值来实现&#xff1b;4、就是父子组件间的值的传递与修改props&…

(贪心)均分纸牌

题目描述 有 N 堆纸牌&#xff0c;编号分别为 1&#xff0c;2&#xff0c;…, N。每堆上有若干张&#xff0c;但纸牌总数必为 N 的倍数。可以在任一堆上取若于张纸牌&#xff0c;然后移动。移牌规则为&#xff1a;在编号为 1 堆上取的纸牌&#xff0c;只能移到编号为 2 的堆上…

agilebpm脑图_设计开发平台前端框架介绍 | AgileBPM 敏捷工作流开发平台—开源免费-基于 Activiti 工作流引擎、Flowable...

目前设计平台前端是独立部署的&#xff0c;引入了 Angular 和 Vue&#xff0c;您可以根据自己技术强项 选择使用 Angular 或者 Vue&#xff0c;他们引入的成本都很小。比如我们团队使用 Angular 很多年了&#xff0c;依赖注入&#xff0c;模块化概念很舒服&#xff0c;使用它构…

(贪心)删数问题

题目&#xff1a; 键盘输入一个高精度的正整数&#xff4e;&#xff08;<240位&#xff09;&#xff0c; 去掉任意&#xff53;个数字后剩下的数字按原左右次序将组成一个新的正整数。 编程对给定的&#xff4e;和&#xff53;&#xff0c;寻找一种方案&#xff0c;使得剩…

alsa的动态库安装在哪里_Linux链接库一(动态库,静态库,库放在什么路径下)...

http://www.cppblog.com/wolf/articles/74928.htmlhttp://www.cppblog.com/wolf/articles/77828.htmlhttp://www.jb51.net/article/34990.htm大部分内容抄的以上文章的。1 库的分类根据链接时期的不同&#xff0c;库又有静态库和动态库之分。静态库是在链接阶段被链接的(好像是…

递推:约瑟夫环

约瑟夫环&#xff08;约瑟夫问题&#xff09; 是一个数学的应用问题&#xff1a;已知n个人&#xff08;以编号1&#xff0c;2&#xff0c;3…n分别表示&#xff09;围坐在一张圆桌周围。从编号为k的人开始报数&#xff0c;数到m的那个人出列&#xff1b;他的下一个人又从1开始…

pic pwm 占空比可调 源码_PIC16F914输出可调占空比PWM波形程序

#includetypedef unsigned int uint;typedef unsigned char uchar;#define KEY0_DOWN() (RB40)//定义按键按下__CONFIG(0X1014);//内部时钟uchar KEY0_FLAG0;/*************************///OSC SET; INTER 4MHZ PERIOD 1US/*************************/void OSC_INIT(){OSCCON0…

(递推)三角形分割平面问题

题目描述 用N个三角形最多可以把平面分成几个区域? 输入 输入数据的第一行是一个正整数T(1<T<10000),表示测试数据的数量.然后是T组测试数据,每组测试数据只包含一个正整数N(1<N<10000). 输出 对于每组测试数据,请输出题目中要求的结果. 样例输入 2 1 …

floquet端口必须沿z轴设置_Ansys Workbench 振动给料机偏心轴的模态分析

张哲维 于 岩 刘传峰 公 业振动给料机主要由振动机架、弹簧、振动器电机等组成。振动器是由两个特定位置的偏心轴以齿轮相啮合组成&#xff0c;装配时必须使两齿轮按标记相啮合&#xff0c;通过电机驱动&#xff0c;使两偏心轴旋转&#xff0c;从而产生巨大合成的直线激振力&am…

(贪心)活动选择

问题描述 有一个需要使用每个资源的n个活动组成的集合S {a1&#xff0c;a2&#xff0c;&#xff0c;an },资源每次只能由一个活动使用。每个活动a都有一个开始时间和结束时间&#xff0c;且 0< s < f < 。一旦被选择后&#xff0c;活动a就占据半开时间区间[s,f]。如果…

vue如何配置服务器端跨域_vue项目里如何配置本地代理实现跨域请求

1、在如图项目配置的index.js文件夹下添加以下一段话微信图片_20180912182204.pngproxyTable: {/rest: {target: http://192.168.20.223:8080, pathRewrite: {"^/rest": /rest },// secure: false, changeOrigin: true }},代码中的rest只是在请求接口时本人自定义的一…

cp命令显示进度条_干货|| Linux常用命令大全

Linux常用命令目录操作命令ls命令名称&#xff1a;ls命令英文原意&#xff1a;list命令所在路径&#xff1a;/bin/ls执行权限&#xff1a;所有用户功能描述&#xff1a;显示目录文件ls (显示当前目录下文件)ls 目录名 (显示指定目录下文件)ls -l (长格式显示目录文件)ls -l 文件…

(贪心)整数区间

题目 找到一个含元素个数最少的集合,使得对于每一个区间,都至少有一个整数属于该集合&#xff0c;输出该集合的元素个数。 输入 首行包括区间的数目n,1≤n≤10000,接下来的n行,每行包括两个整数a,b,被一空格隔开,0≤a≤b≤10000,它们是某一个区间的开始值和结束值。 输出 …

二进制法生成1-n的子集

先上代码&#xff1a; #include<iostream> using namespace std;void print_subset(int n, int s){for(int i0;i<n;i)if(s&(1<<i)){printf("%d",i);} printf("\n");} int main(){int n;cin>>n; for(int i0;i<(1<<n);i)…

centos 等保三级_等保测评三级整改-身份鉴别

a)应对登录的用户进行身份标识和鉴别&#xff0c;身份标识具有唯一性&#xff0c;身份鉴别信息具有复杂度要求并定期更换&#xff1b;在linux&#xff0c;设置密码复杂度的方法有几个1. 一个是在/etc/login.defs文件&#xff0c;里面几个选项PASS_MAX_DAYS 90 #密码最长过期天数…

k3 审核流程图_K3操作流程图

目录一、流程图符号说明&#xff1a; ______________________________________________ 3二、K/3系统基础操作流程图&#xff1a; ___________________________________ 4A、“中间层—账套管理”_________________________________________________ 4 B&#xff1a;系统基础资…

c#中connect函数_Flink算子使用方法及实例演示:union和connect

Flink的Transformation转换主要包括四种&#xff1a;单数据流基本转换、基于Key的分组转换、多数据流转换和数据重分布转换。读者可以使用Flink Scala Shell或者Intellij Idea来进行练习&#xff1a;Flink Scala Shell&#xff1a;使用交互式编程环境学习和调试FlinkFlink 01 |…