2017-11-12 16 views
-1

行列を反時計回りに180度回転させるはずのこのコードはありますが、行番号が不均一な場合は最終行列の中間線は変更されません行列を反時計回りに180度回転する問題

for (int index1 = 0; index1 <n/2; index1++) 
     for (int index2 = 0; index2 < n; index2++) 
      swap(mat[index1][index2], mat[n - index1 - 1][n - index2 - 1]); 

そうでない場合は、コードが実行行列の半分の後にあなたがそれを終わらせることができるようにあなたはおそらく、スワップの量をカウントする行と列

+3

鉛筆と紙に戻って、不均等な行数と列数については、計画のどこに欠陥があるかを確認してください。 – PaulMcKenzie

+0

あなたは 'index1'ではなく' row'や 'r'や' index2'ではなく 'column'や' col'や 'c'のようなより良い名前を使うことで自分自身を好きになるでしょう。それから、あなた自身に尋ねます:*奇数行の行列の中段に行くとどうなりますか? – Caleb

答えて

0

の数が偶数のため正常に動作します:

for (int index1 = 0, cntSwap = 0, maxSwap = (n*m)/2; cntSwap < maxSwap; ++index1) 
    for (int index2 = 0; index2 < m && cntSwap < maxSwap; ++index2, ++cntSwap) 
     std::swap(mat[index1][index2], mat[n - index1 - 1][m - index2 - 1]); 
関連する問題