1

三目並べの配列に同じ文字が3つあるかどうかをチェックする関数があります。問題は、ロジックに問題があることです。

for (int i = 0; i < SIZE; i++){
    for (int j = 0; j < SIZE; j++){
        if (board[i][j] != '*'){
            if (i != j){
                if (board[i][i] == board[i][j]){
                    matches++;
                }
                else if (board[i][j] == board[j][i]){
                    matches++;
                }
                else if (board[i][j] == board[j][j]){
                    matches++;
                }
                else if (board[i][j] == board[j][i]){
                    matches++;
                }
                else {
                    matches = 0;
                }
            }
        }
    }
}

水平方向と垂直方向に一致するかどうかを確認できるようです。しかし、対角線の一致を見つける方法を完全に理解することはできません。このコードは機能すると思いましたが、今のところ機能していません。

何が悪いのかについて何か提案はありますか?

4

1 に答える 1

1

宿題のように見えるので、コードソリューションは提供しません。i == jただし、両方のインデックスが等しい場合( )、またはインデックスの合計が行列の次元より1少ない場合(i + j == SIZE - 1。)、対角線上にある場合はわかります。

最初のケースでは、最初の対角線(左上から右下)にいます。2番目のケースでは、2番目の対角線(右上から左下)にいます。

これは、任意のサイズの正方行列に対して機能します。

于 2012-10-24T02:26:51.303 に答える