2016-11-18 54 views
0

我需要检查一个二维数组是否以降序排列。C:检查一个二维数组是否以降序排列,不包括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; 
} 

这是行不通的。假设数组进行排序,不

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

只要最后一个元素被选中,我拿假的,因为0 < 1.

我几乎摧残了我的头。 你能提出一些想法吗?谢谢!

+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'不再处于范围内。此外,将'j' decl移出for-loop初始化程序也不能解决问题,因为它可以确保在'j == d'时发生超出范围的违规(这是破坏内部for循环的条件)。 – 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; 
}