2016-11-18 2 views
0

2次元配列が降順であるかどうかを確認する必要があります。C:2次元配列が0以外の降順であるかどうかをチェック

私は魂を書いたが、それに満足していなかった。ここ は私の作業コードです:

bool sorted(void) 
{ 
    int prev = board[0][0]; 
    int counter = 0; 
    for (int i = 0; i < d; i++){ 
     for (int j = 0; j < d; j++){ 
      if (board[i][j] < prev){ 
       return false; 
      } 
      prev = board[i][j]; 
      counter++; 
      if (counter == d * d - 1){ 
       return true; 
      } 
     } 
    } 
    return true; 
} 

私はカウンターなしで、唯一の条件文を使用する方法を探しています。ここで私が試したものです:

bool sorted(void) 
{ 
    int prev = board[0][0]; 
    for (int i = 0; i < d; i++){ 
     for (int j = 0; j < d; j++){ 
      if (board[i][j] < prev && board[i][j] != 0){ 
       return false; 
      } 
      prev = board[i][j]; 
     } 
    } 
    return true; 
} 

これは動作しません。 0 < 1.

は、私はほとんど私の頭を難破するので、すぐに最後の要素がチェックされているよう

&& board[i][j] != 0 

せずに、配列をソートすると仮定すると、私は、偽得ます。 アイデアを教えてください。ありがとう!

+2

これはjavascriptのようには見えません。 –

+1

申し訳ありません。私はJSとたくさん仕事をしていて、間違ってここに入れました:DこれはCです。 – nkom

+0

問題を示す[最小、**完全**、検証可能な例](http://stackoverflow.com/help/mcve) 。 [これのようなもの](http://ideone.com/bJdCWe)、実際にあなたが主張することを行い、あなたの質問コードとして*その*例を使用します。 – WhozCraig

答えて

1

は、以下のことを試してみてください。

bool sorted(void) 
{ 
    int prev = board[0][0]; 
    for (int i = 0; i < d; i++){ 
     for (int j = 0; j < d; j++){ 
      if (board[i][j] < prev && board[i][j] != 0){ 
       return false; 
      } 
     } 
     prev = board[i][j]; 
    } 
return true; 
} 
+1

'prev = board [i] [j];が発生したときに' j'がスコープに入っていないので、これはコンパイルされません。さらに、forループ初期化子から 'j' declを移動しても、' j == d'(範囲内のfor-loopを壊した状態)。 – WhozCraig

1

あなたはprevの初期値を変更し、あなたの問題を解決することができます:

#include <limits.h>     // for INT_MIN 

// ... 

bool sorted(void) 
{ 
    int prev = INT_MIN;    // <-- initialize with the lowest possible value 
    for (int i = 0; i < d; i++){ 
     for (int j = 0; j < d; j++){ 
      if (board[i][j] < prev){ 
       return false; 
      } 
      prev = board[i][j]; 
     } 
    } 
    return true; 
} 
関連する問題