for 轉 while 急用急用非常急

int main() {

char foo[] = {'1','2','3','4','5','6','7','8','9','A','J','Q','K'};

int i , j;

char tmp ;

// 以時間設定隨機函式初始值

srand(static_cast<unsigned>(time(NULL))) ;

// 計算整數陣列的長度

int size = sizeof(foo) / sizeof(char) ;

// 陣列元素由後往前依次與其前的另一個隨機位置對調數值

for ( i = size-1 ; i > 0 ; --i ) {

j = rand() % (i+1) ;

if ( i == j ) continue ; // 如果i 與j 兩位置相等則不對調

tmp = foo[i] ;

foo[i] = foo[j] ;

foo[j] = tmp ;

}

for ( i = 0 ; i < size ; ++i ) cout << foo[i] << " " ;

cout << '\n' ;

return 0 ;

}

1 個解答

評分
  • 6 年前
    最佳解答

    僅把 for 的整個迴圈範圍以 while 替代,其他的程式碼沒有更動

    i = size-1;

    while( i > 0 ) {

    j = rand() % (i+1) ;

    if ( i == j )

    continue ; // 如果i 與j 兩位置相等則不對調

    tmp = foo[i] ;

    foo[i] = foo[j] ;

    foo[j] = tmp ;

    i--;

    }

    參考資料: 自己
還有問題?馬上發問,尋求解答。