zoukankan      html  css  js  c++  java
  • ACM POJ 1146 ID Codes

    题目大意:输入一个字符串。输出它的下一个字典序排列。

    字典序算法思想:

    1.从右向左寻找字符串找出第一个a[i]<a[i+1]的位置i;

    2.从右向左找出第一个大于a[i]的元素a[j];

    3.swap(a[i],a[j])

    4.将a[i+1]......到a[stelen(a)]倒序

    5.输出a

    代码例如以下:

    #include<iostream>
    #include<cstdio>
    #include <cstring>
    #include<algorithm>
    #include<cstdlib>
    using namespace std;
    
    inline void swap(int &a,int &b){
    	int temp;
    	temp=a;
    	a=b;
    	b=temp;
    } 
    
     void Print(int a[],int n){
    	for(int i=1;i<=n;i++){
    		printf("%c",a[i]+'0');
       		if(i==n) cout<<"
    ";
    	}
    	return ;
    }
    
    int main(){
    	
    	int Dire[100],q;
    	char a[100];
    	int r,l,n,t;
    	int count=0,c=1;	 
    	while(scanf("%s",a)&&strcmp(a,"#")!=0){
    		    n=strlen(a);//求出字符串的长度  
    		    for(int i=1;i<=n;i++){//初始化待排列的数字串 
    		       Dire[i]=a[i-1]-'0';
    		    }
    		    int i=n-1;
                l=0;
    		        while(i>0){
    		           if(Dire[i]<Dire[i+1]){//找到Dire[i]<Dire[i+1] 
    			    	    l=i;
                            break;
                        }
                       else{
                           i--;
                       }
                    }    
                    if(l){ //存在兴许排列  
    		    		   for(int j=n;j>l;j--){
    		    		    	if(Dire[j]>Dire[l]){ //从右向左找到第一个Dire[j]>Dire[i]
    		    		    	    r=j;
    		    	                break; //找到第一个Dire[j]时。即跳出循环  
    		    	            }
    		               }
    		               swap(Dire[l],Dire[r]);  //交换Dire[j]>Dire[i]
    		           for(int p=l+1,q=n;p<q;p++,q--)//倒序 
    					   swap(Dire[p],Dire[q]); 
    				   Print(Dire,n);
    		         }
                    else{
                       cout<<"No Successor"<<endl;
                    }
         }
    	return 0;
    }  
    


  • 相关阅读:
    找水王
    哈利波特图书购买问题
    中序线索化二叉树[C语言实现及注释]
    第一篇随文。
    理解Python函数中的的return
    记录一款实时同步的软件——Lsyncd
    for循环
    while循环
    文件操作
    我的第一个博客
  • 原文地址:https://www.cnblogs.com/cxchanpin/p/7054215.html
Copyright © 2011-2022 走看看