【解決方法】このような問題を解決するにはどうすればよいですか?


1000 行で構成される入力があります。すべての行には、30 個の数字で構成される配列があります。最初の 15 個の数字は 1 ~ 10 の間で、最後の 15 個の数字はそれらの正方形です。コードは左から数字を読み取ります。右側の同じ番号が置き換えられます。その後、読み取りと書き込みが続行され、左側のインデックスが右側のインデックスと等しくなると、コードは停止します。

私が試したこと:

最初は前半用、2 つ目は後半用の 2 つのループを使用しようとしましたが、続行できませんでした。

解決策 1

引用:

コードは左から数字を読み取り、右に同じ数字がある場合、これらの数字は置き換えられます。

何に置き換えられますか?

セットの番号 (例: 左側のもの) を別のセット (例: 右側のもの) で検索する必要があります。 直接的で力ずくのアプローチでは、次の 2 つのループを使用します。

疑似コード
for i = 1 to 15
  for j = 16 to 30
    if n[i] == n[j]
      replace

解決策 2

引用:

最初の 15 番目と最後の 15 番目の両方に同じ数字がある場合、これらの数字は置き換えられます。私はちょうどそれについて考えましたが、私には奇妙に感じました。この質問には間違いがあるに違いありません。

そうではありません: 1 と 10 の間の正方形であるため、1、4、および 9 の 3 つの数字が両側に表示されます。

したがって、これを行う最も簡単で効率的な方法は、右側でこれら 3 つの値を探し、1 つでも見つかった場合は、左側で一致する 1、2、または 3 を探すことです。
見つけたら、それらを削除します。
一致のインデックスが同じ場合、処理を停止します。

コメント

タイトルとURLをコピーしました