PAT 乙 级 1030 . 完美 数列 ( 25 )
# include < stdio . h > # include < stdlib . h > int sort _ function ( const void * a , const void * b ) { return * ( ( double * ) a ) - * ( ( double * ) b ) ; } int main ( ) { int N , i , j , sum = 0 ; double p , * a ; scanf ( " % d % lf " , & N , & p ) ; a = ( double * ) malloc ( sizeof ( double ) * N ) ; if ( ! a ) { fprintf ( stderr , " malloc error ! \ n " ) ; return - 1 ; } for ( i = 0 ; i < N ; i + + ) scanf ( " % lf " , & a [ i ] ) ; qsort ( a , N , sizeof ( double ) , sort _ function ) ; for ( i = 0 ; i < N ; i + + ) { for ( j = N - 1 ; j > 0 ; j - - ) { if ( a [ j ] < = a [ i ] * p ) { if ( sum < j - i ) sum = j - i ; else break ; } } } printf ( " % d \ n " , sum + 1 ) ; free ( a ) ; return 0 ; } 栈 上 的 空间 是 有限 的 ， 不 建议 你 在 栈 上 申请 太 大 的 空间 。 需要 多少 就 申请 过少 ， 但是 C 语言 不 支持 可变数 组 ， 所以 在 栈 上 申请 了 空间 。 对于 缩小 运行 时间 ， 从 你 这个 程序 里 来讲 ， 从 减少 循环 次数 开始 吧 ， 若 想 减少 循环 次数 ， 那么 就 要 从 算法 上 考虑 了 。
