十三:全排列-区间数排列

问题:全排列-区间数排列
题目描述

对n和m之间的数进行全排列(包括n和m,且:0<n<m<30),并且输出所有的排列结果
输入
两个整数,分别为n和m
输出
n和m之间所有数的全排列结果
样例输入
5 7
样例输出
5 6 7
5 7 6
6 5 7
6 7 5
7 5 6

7 6 5

 1 #include<stdio.h>
 2 #include<string.h>
 3 int n,m;
 4 void fun(int b[],int k){
 5     int i,j;
 6     int t;
 7     if(!b[k]){
 8         for(i=0;b[i];i++){
 9             if(i==m-n)
10             printf("%d",b[i]);
11             else
12             printf("%d ",b[i]);
13             }
14         printf("\n");
15         return;
16     }
17     for(i=k;i<=m-n;i++){
18         t=b[i];
19         for( j=i-1 ; j>=k ; j-- )
20               b[j+1]=b[j];
21         b[k]=t;
22         fun(b,k+1);
23         t=b[k];
24         for( j=k ; j<=i ; j++)
25               b[j]=b[j+1];
26         b[i]=t;
27     }
28
29 }
30 int main(){
31     int k=0;
32     int b[30];
33     int i,l=0;
34     memset(b,0,sizeof(b));
35     scanf("%d%d",&n,&m);
36     for(i=n;i<=m;i++) b[l++]=i;
37     fun(b,k);
38     return 0;
39 }

原文地址:https://www.cnblogs.com/yuming226/p/8146428.html

时间: 2024-10-11 00:13:29

十三:全排列-区间数排列的相关文章

连号区间数

*/--> pre.src {background-color: Black; color: White;} pre.src {background-color: Black; color: White;} 连号区间数 问题描述 小明这些天一直在思考这样一个奇怪而有趣的问题: 在 1~N 的某个全排列中有多少个连号区间呢?这里所说的连号区间的定义是: 如果区间[L, R] 里的所有元素(即此排列的第 L 个到第 R 个元素)递增排序后能得到一个长度为 R-L+1 的"连续"数列,

蓝桥杯 - 连号区间数 (历届试题!)

连号区间数 时间限制:1.0s   内存限制:256.0MB 问题描述 小明这些天一直在思考这样一个奇怪而有趣的问题: 在1~N的某个全排列中有多少个连号区间呢?这里所说的连号区间的定义是: 如果区间[L, R] 里的所有元素(即此排列的第L个到第R个元素)递增排序后能得到一个长度为R-L+1的"连续"数列,则称这个区间连号区间. 当N很小的时候,小明可以很快地算出答案,但是当N变大的时候,问题就不是那么简单了,现在小明需要你的帮助. 输入格式 第一行是一个正整数N (1 <=

【蓝桥杯】历届试题 连号区间数(运行超时)

  历届试题 连号区间数   时间限制:1.0s   内存限制:256.0MB 问题描述 小明这些天一直在思考这样一个奇怪而有趣的问题: 在1~N的某个全排列中有多少个连号区间呢?这里所说的连号区间的定义是: 如果区间[L, R] 里的所有元素(即此排列的第L个到第R个元素)递增排序后能得到一个长度为R-L+1的“连续”数列,则称这个区间连号区间. 当N很小的时候,小明可以很快地算出答案,但是当N变大的时候,问题就不是那么简单了,现在小明需要你的帮助. 输入格式 第一行是一个正整数N (1 <=

【蓝桥杯】连号区间数

小明这些天一直在思考这样一个奇怪而有趣的问题: 在1~N的某个全排列中有多少个连号区间呢?这里所说的连号区间的定义是: 如果区间[L, R] 里的所有元素(即此排列的第L个到第R个元素)递增排序后能得到一个长度为R-L+1的"连续"数列,则称这个区间连号区间. 当N很小的时候,小明可以很快地算出答案,但是当N变大的时候,问题就不是那么简单了,现在小明需要你的帮助. 输入格式: 第一行是一个正整数N (1 <= N <= 50000), 表示全排列的规模. 第二行是N个不同的

蓝桥杯 历届试题 连号区间数

历届试题 连号区间数 时间限制:1.0s   内存限制:256.0MB 问题描述 小明这些天一直在思考这样一个奇怪而有趣的问题: 在1~N的某个全排列中有多少个连号区间呢?这里所说的连号区间的定义是: 如果区间[L, R] 里的所有元素(即此排列的第L个到第R个元素)递增排序后能得到一个长度为R-L+1的"连续"数列,则称这个区间连号区间. 当N很小的时候,小明可以很快地算出答案,但是当N变大的时候,问题就不是那么简单了,现在小明需要你的帮助. 输入格式 第一行是一个正整数N (1 &

蓝桥杯 - 连号区间数

历届试题 连号区间数 时间限制:1.0s   内存限制:256.0MB 锦囊1 并查集. 锦囊2 从左到右扫描数组,将所有扫描到的数放到并查集中,将相邻的数在集合中合并.对于每个合并的集合记录下递增可连的次数和递减可连的次数以及数字出现的最早和最晚时刻.当新扫描的数过来时根据以上几个值来合并区间并维护. 问题描述 小明这些天一直在思考这样一个奇怪而有趣的问题: 在1~N的某个全排列中有多少个连号区间呢?这里所说的连号区间的定义是: 如果区间[L, R] 里的所有元素(即此排列的第L个到第R个元素

历届试题 连号区间数

问题描述 小明这些天一直在思考这样一个奇怪而有趣的问题:在1~N的某个全排列中有多少个连号区间呢?这里所说的连号区间的定义是:如果区间[L, R] 里的所有元素(即此排列的第L个到第R个元素)递增排序后能得到一个长度为R-L+1的"连续"数列,则称这个区间连号区间.当N很小的时候,小明可以很快地算出答案,但是当N变大的时候,问题就不是那么简单了,现在小明需要你的帮助.输入格式第一行是一个正整数N (1 <= N <= 50000), 表示全排列的规模. 第二行是N个不同的数

全排列与字典序排列

首先,全排列是一个比较简单的问题,但我却没有真正的去实现过全排列. 让我独自思考全排列的话,如将 " abcd" 进行全排列,这种简单的全排列也能将我难住,因为真的没有考虑过这种问题.思考了一会,我只能给出以下比较麻烦的算法: //字符串全排列 void printRE(char* str,int index,char s[],int length){ if(index == length) printf("%s \n",str); else{ bool exsis

最大不相交区间数+最少区间数覆盖问题 贪心思想

最大不相交区间数的一道题是hdu2037 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2037 题目给出n个区间,问最多有多少个区间没有重叠,只需要对区间右端点进行排序就行,因为一个节目结束得早的话就会为其他节目留下更多的时间,如果选择对节目的开始时间进行排序的话就会导致有一个节目迟迟不结束使得其他节目又没法开始的现象.右端点最小的第一个区间时一定要选的.这个可以简单地将其他右端值更大的区间跟他交换,就会发现不会产生更多的区间数,只会小于等于我们