私がこれを正しく理解すれば、それはある種のビンゴのようなゲームです。
上記を読んで、行または列をチェックするだけでよい場合は、1000に到達するためのイテレータを用意することが解決策になります。
ただし、対角線もチェックする必要があるため、イテレータを増やすことはできません。IE:対角線には3つの数字だけを含めることができ、1000ではなく3つの数字で消すことができます。
通過する任意の位置について、その行、列、および対角線が何であるかを通知するアルゴリズムを使用できます。
これらの値がすべて真の場合、行/列の対角線全体をキャンセルしました。固定の1000x1000マトリックスがあるため、(int)(CalledNumber / 1000)-1がチェックする行、(CalledNumber%1000)が列です。対角線を取得するには、上に移動する行ごとに1列を減算し、左から右に移動するときに下に移動する行ごとに1列を加算し、右から左に移動するときに逆の操作を追加します。
これはブール[1000][1000]行列になるため、必要なすべての位置を収集したら、行/対角/列全体に取り消し線が引かれている場合は、AND条件でそれらをチェックします。
そうすれば、各数値に関連する位置を取得する必要があり、ブール値でのチェックは十分に高速であり、多くのメモリを必要としません。
編集:他の可能な方法はすでに投稿されています:すべての対角線/行の列を事前に計算し、いくつかのカウンターを減らしますが、メモリの無駄が少しあります。