2

数独プログラムをコーディングしています。配列内の数値が、相互に複製するのが難しいかどうかを判断することがわかりました。

今、私は配列を持っています:int streamNum[SIZE]

  • SIZE=3 の場合、次のようにこの問題を処理できます。if(streamNum[0]!=streamNum[1])...
  • SIZE=100 の場合、より良い解決策が必要だと思います。標準的な方法はありますか?
4

3 に答える 3

1

これを行うにはいくつかの方法がありますが、最も簡単なのは2つのループを書くことだと思います

bool has_duplicate = false;
for (int i = 0; i < SIZE && !has_duplicate; ++i)
    for (int j = i + 1; j < SIZE && !has_duplicate; ++j)
        if (streamNum[i] == streamNum[j])
            has_duplicate = true;
if (has_duplicate)
{
    ...
}
else
{
    ...
}

最初のループは配列の各要素を処理し、2 番目のループは配列の残りの要素に重複があるかどうかをチェックします (これが から始まる理由i + 1です)。重複を見つけるとすぐに、両方のループが終了します (それが原因&& !has_duplicateです)。

これは最も効率的な方法ではありません。重複を探す前に配列をソートする方が効率的ですが、配列の内容が同時に変更されます。

お客様の要件を十分に理解できたと思います。

于 2013-10-06T07:34:05.703 に答える
1
for(int i=0;i<size;i++){
    for(int j=i+1;j<size;j++){
        if(streamNUM[i]==streamNUM[j]){
           ...........
        }
     }
}

重複があるかどうかが必要だと思いますこれは役立つかもしれません

なければコメント

于 2013-10-06T07:35:34.857 に答える