首页 > 代码库 > 整数分拆
整数分拆
C语言: 高亮代码由发芽网提供
void print_partition ( int n )
{ int i = 1;
int m = 1;
int h = 1;
int t , r ;
int a[ n+1 ] ;
for ( ; i < n + 1 ; ++ i ) a[ i ] = 1 ;
a[ 1 ] = n ;
printf ( "%d \n", a[ 1 ] ) ;
while ( a[ 1 ] ! = 1 )
{ if ( a [ h ] == 2 ) { a[ h-- ] -- ; m++ ; }
else { r = --a[ h ];
t = m - h + 1 ;
while ( t >= r ) { a[ ++h ] = r ; t -= r ; }
if ( t == 0 ) m = h ;
else m = h + 1 ;
if ( t >= 2 ) a[ ++h ] = t ;
}
for ( i = 1 ; i < m + 1 ; i++ )
printf ( "%d ", a[ i ] ) ;
printf ( "\n" ) ;
}
}
{ int i = 1;
int m = 1;
int h = 1;
int t , r ;
int a[ n+1 ] ;
for ( ; i < n + 1 ; ++ i ) a[ i ] = 1 ;
a[ 1 ] = n ;
printf ( "%d \n", a[ 1 ] ) ;
while ( a[ 1 ] ! = 1 )
{ if ( a [ h ] == 2 ) { a[ h-- ] -- ; m++ ; }
else { r = --a[ h ];
t = m - h + 1 ;
while ( t >= r ) { a[ ++h ] = r ; t -= r ; }
if ( t == 0 ) m = h ;
else m = h + 1 ;
if ( t >= 2 ) a[ ++h ] = t ;
}
for ( i = 1 ; i < m + 1 ; i++ )
printf ( "%d ", a[ i ] ) ;
printf ( "\n" ) ;
}
}
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。