zoukankan      html  css  js  c++  java
  • 全排列

    问题

    给定{1,2,…, n}的一个全排列,按照字典序列出从该排列开始的所有排列。

    输入

    • 第一行是一个正整数n(≤ 9),表示全排列是{1,2,…, n}的全排列
    • 第二行是一个全排列

    输出

    按照格式要求输出该排列开始的所有排列

    输入样例

    3
    231
    

    输出样例

    231
    312
    321
    

    全排列方法一

    #include <iostream>
    using namespace std;
     
    void swap(char &string1,char &string2) 
    {
    	char temp = string1;
    	string1 = string2;
    	string2 = temp;
    }
     
    int fun(char* string,int length)
    {
    	bool flag = 0;
    	int part1,part2;
    	//从右开始,找出第一个比右边数字小的 x 
    	for(int i=length-1;i>0;i--)
    	{
    		if(string[i-1] < string[i])
    		{
    			flag = 1;
    			part1 = i-1;
    			break;			
    		}
    	}
    	if(flag == 0)
    		return 1;
    		//寻找右侧比x大的最小数字 
    	int min = string[part1+1];
    	part2 = part1+1;	
    	for(int i=length-1;i>part1;i--)
    	{
    		if(string[i] < min && string[i] > string[part1])
    		{
    			min = string[i];
    			part2 = i;
    		}	
    	}
    	// 交换两数字 
    //	cout<<part1<<" "<<part2<<endl;
    	swap(string[part1],string[part2]);
    	//倒转x右侧所有数字 
    	for(int i=length -1,j= part1+1;i>j;)
    	{
    		swap(string[i],string[j]);
    		i--;
    		j++;
    	}
    	cout<<string<<endl;
    	return 0;
    }
     
    int main()
    {
    	char str[9] = {0};
    	int length = 0;
    	scanf("%d",&length);
    	scanf("%s",str);
    	cout<<str<<endl;
    	while(!fun(str,length))
    	{
    		
    	}
    }
    
    
  • 相关阅读:
    蛇形矩阵
    润年还是平年
    汽水瓶
    魔幻矩阵
    魔方矩阵
    时间字段替换
    Windows Server 2012 R2蓝屏
    查询速度慢的原因很多(转载)
    索引和锁
    别不拿里程碑当石头---------IT项目管理之项目计划(转)
  • 原文地址:https://www.cnblogs.com/miaomiaolan/p/13204398.html
Copyright © 2011-2022 走看看