int( ){ char ch = 0 ; int res = 0 ; int f = 1 ; while ( ch >'9' || ch < '0' ) { if ( ch == '-' ) { ch = getchar ( ) ; f = -1 ; break ; } ch = getchar ( ) ; } while ( ch >= '0' && ch <= '9' ) res = res * 10 + ch - 48 , ch = getchar ( ) ; return res * f ; }
voidsearch( int step , int f ){ if ( step == m + 1 ) { if ( ans[m] == N ) flag = 1 ; return ; } for ( int i = step - 1 ; i >= f ; i -- ) { for ( int j = i ; j >= 1 ; j -- ) { ans[step] = ans[i] + ans[j] ; int now = ans[step] ; for ( int i = m - step ; i >= 1 ; i -- )now *= 2 ; if ( now < N ) break ; search ( step + 1 , i + 1 ) ; if ( flag ) return ; ans[step] = 0 ; } } }
voidprint( ){ for ( int i = 1 ; i < m ; i ++ ) printf ( "%d " , ans[i] ) ; printf ( "%dn" , ans[m] ) ; return ; }
intmain( ){ N = read ( ) ; ans[1] = 1 ; while ( N ) { if ( N == 1 ) { printf( "1n" ) ; N = read ( ) ; continue ; } flag = 0 ; for ( int i = 2 ; i <= N ; i ++ ) { m = i ; search ( 2 , 1 ) ; if ( flag ) { print ( ) ; break ; } } N = read ( ) ; } }
近期评论