(3)あなたが質問を読んだ後でより良いタイトルを思いつくことができるなら、それを自由に変更してください。入力として私は2と20の間の偶数である整数を持ってい$teams。この整数を$teamsとしましょう。$teams-1含む)の間の$teams-1数$teams-1数のマトリックスを生成することです:対角線(左上から右下)は値-1を持ちます。同じ番号が同じ列または行に複数回表示されないことがあります。列Nに数字が表示されている場合、行Nには数字が表示されないことがあります。列2に表示されている場合は、行2には表示されません。対角線上の部分だけを見ていることに注意してください。この問題は問題になりません。最初の2つの条件は非常に簡単でしたが、3番目の条件は私を殺しています。$teams番号は2から20の間の任意の偶数になる可能性があるので、私はそれを実現させる方法を知らない。条件1と2の正しい出力を与えるコードを以下に示す。teamご覧のとおり、番号1は2列目と2列目の両方に表示され、番号4は5列目と5列目の両方に表示され、ルール3を破ります。UPDATED:私は、バックトラックを使って解決策を実装しようとしました。コードはおそらくリライト(おそらくクラス)を必要とする可能性があり、物事を最適化することができます。アイデアは、すべてのソリューションを歩くことですが、ブランチが3つのルールのうちの1つを破っていることがわかったらすぐにブランチを停止します。6つのチームでは、71,92回の試合で解決策が見つかる。http://en.wikipedia.org/wiki/1_%2B_2_%2B_3_%2B_4_%2B_%E2%8B%AFを参照してhttp://en.wikipedia.org/wiki/1_%2B_2_%2B_3_%2B_4_%2B_%E2%8B%AF。-私は、あなたのプログラムにいくつかの試行錯誤をさせることなくこの問題を解決する決定論的な方法があるとは思わない(推測がルールと矛盾するならば推測して戻す)。私たちの週がすでに同じ行または対応する列に属しているかどうかをチェックしてくださいそうであれば、私が提供した数式を使ってランダムに選んでください推測がうまくいくまでwhileループでこれを行い、次に進む私は4,6,8,10および20のチームのためにそれをテストし、それは完全に働いた。$weekを0に設定する安全機構を導入しましたが、それは起こりません。4これはラウンド1で、1が6を満たし、2が5を満たし、3が4を満たす。3これは、各行が1週間を表す配列で表現できます。最初の列のチームが最後のチームと出会い、2番目の列が2番目の最後の出会いなどです。algorithmどのように32ビット整数の設定ビットの数を数える?行または列に0が含まれている場合は、行列の各セルを0に設定します。MBのRAMに100万の8桁の数字をソートする日本語Top。