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

hdu 1716排列2

編輯:C++入門知識

hdu 1716排列2


學習:

1.利用STL裡的next_permutation()函數(對於n個數使用n!下就可以得出它的全排列額:

boolean next_permutation(a.begin(),a.end()) 
該函數是以輸入字符串中的字符所構建的按字典順序全排列中,判斷當前字符串之後是否還有下一個字符串 
如果next_permutation的執行次數少於全排列的個數,返回true 
例如 a="abc" 全排列有 "abc" "acb" "bac" "bca" "cab" "cba"   
執行一次next_permutation 返回true  a變成 "acb"
再執行一次next_permutation 返回true a變成 "bac"
...
當執行到a="cba" 時 由於這已經是全排列的最後一個字符串,所以 再次執行next_permutation 則返回false

2.首先看什麼叫字典序,顧名思義就是按照字典的順序(a-z, 1-9)。以字典序為基礎,我們可以得出任意兩個數字串的大小。

我的代碼:

#include
#include
#include
using namespace std;
int str[4]; //輸入的四位數字。 
int shu[10000][4],chu[1000][4],t,h; //t表示shu中元素個數,h表示chu中元素個數。 
void painie(void);//對這四個數進行排列並儲存在shu[]中,這裡包含首位為0,和數字重復的情況。 
  void painie(void)
  {
  	for(int i=0;i<24;++i)//由於是4!總情況故循環24次 
  	{
	  	for(int j=0;j<=3;++j)
	  	{
	  		shu[t][j]=str[j];
	  	}
	  	t++;
	  	next_permutation(str,str+4); //每次對str中的四個元素進行排列。 
    }
  }
int main (void)
{
	int kkk=0;
	while(scanf("%d%d%d%d",&str[0],&str[1],&str[2],&str[3])&&str[0]+str[1]+str[2]+str[3])//四個同時為零退出。 
	{   
	    if(kkk++) printf("\n");//在每組數據前面輸出一個空行,但第一組數據沒有。 
		memset(shu,0,sizeof(shu));
		memset(chu,0,sizeof(chu));
		t=0;
		h=0; //初始化。 
		painie();
		/*for(int j=0;j
以下為遞歸實現全排列:

/*µÝ¹éʵÏÖÈ«ÅÅÁУ¨22:44)*/
#include
#include 
char a[5],b[129][5];
int ht=0;//¼Ç¼bÖÐÊý¾ÝÊýÁ¿¡£  
void allsort( char str[],int n,int t);
void swap(char str[],int a,int b);
  void allsort(char str[],int n,int t)
  {
  	if(ht==0)
	{
	    for(int i=0;i<5;i++) b[ht][i]=str[i];
		ht++;
	}
  	if(n-t!=1)
  	{
  		for(int k=t;k




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