程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> ACM POJ 1146 ID Codes

ACM POJ 1146 ID Codes

編輯:C++入門知識

ACM POJ 1146 ID Codes


題目大意:輸入一個字符串,輸出它的下一個字典序排列。

字典序算法思想:

1.從右向左尋找字符串找出第一個a[i]

2.從右向左找出第一個大於a[j]的元素a[i];

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

4.將a[i]......到a[stelen(a)]倒序

5.輸出a

代碼如下:

#include
#include
#include 
#include
#include
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<<"\n";
	}
	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]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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved