輸出所有數(shù)列以及數(shù)列個(gè)數(shù)的程序:
#include
int a[100] ;
int lay ;
int n1 ;
int Count(int m,int n,int k)
{
int i,s ;
if ( lay == n1 ) {
for ( i = 0 ; i < n1 ; i ++) {
printf("%d ",a[i]) ;
}
printf("\n") ;
return(1) ;
}
s = 0 ;
for ( i = 0 ; i 請(qǐng)問如何修改?希望給出一個(gè)效率高的方法改成這樣:#include
int a[100] ;int b[100] = {1,3,4} ;int lay ;int n1 ;int s ;int seq ;void Count(int m,int n,int k){ int i,f ;if ( lay == n1 ) {s ++ ;f = 1 ;for ( i = 0 ; i < n1 ; i ++) { printf("%d ",a[i]) ; if ( a[i] != b[i] ) {f = 0 ; }}if ( f != 0 ) { seq = s ;}printf("\n") ;return ; } for ( i = 0 ; i <= m - n ; i ++ ) {a[lay] = k+i+1 ;lay ++ ;Count(m-i-1,n-1,k+i+1) ;lay -- ; }}void main(void){ int m,n ; int i ;m = 4 ; n1 = n = 3 ; s = 0 ; seq = -1 ; Count(m,n,0) ; printf("Total is %d\n",s) ; if ( seq != -1 ) {printf("{ ",b[i]) ;for ( i = 0 ; i < n1 ; i ++ ) { printf("%d ",b[i]) ;}printf("} is the No. %d\n",seq) ; }}這樣的程序你覺得效率不高?那什么樣的是你所稱的效率呢?時(shí)間開銷?空間開銷?程序的理解難易程度?我詢問這個(gè)數(shù)列,主要是我在寫廣度優(yōu)先搜索時(shí)需要判斷重復(fù),我遇到很多問題最終都可以抽象為這個(gè)數(shù)列,我也知道這個(gè)數(shù)列一共有c(m,n)個(gè)。你寫的深度優(yōu)先搜索是構(gòu)造這些數(shù)列,計(jì)數(shù),直到構(gòu)造出這個(gè)數(shù)列為止,這樣的效率放入我的廣度優(yōu)先搜索我無法滿意,那還不如用STL的set效率高,不過還是謝謝你,要是過幾天沒有答案,分就給你了,我想要的是一種類似于數(shù)學(xué)公式的方法,快速的求出一個(gè)數(shù)列的映射關(guān)系用公式恐怕不太容易