あなたの条件では、特定の牧師の次の教会がランダムに選択される必要はありません。教会リストを反復処理できませんか?
つまり、各牧師に0から12までの番号を割り当てます。各教会に 0 ~ 12 の番号を割り当てます。最初の月:
月 0:
牧師-0 --> 教会-0
牧師-1 --> 教会-1
牧師-2 --> 教会-2
...
牧師-n --> 教会-n
翌月、カウンターの 1 つをインクリメントするだけです (ラップアラウンドあり)。
月 1:
牧師-0 --> 教会-1
牧師-1 --> 教会-2
牧師-2 --> 教会-3
...
牧師-n --> 教会-0
次に、残りの月について繰り返します。
月 3:
牧師-0 --> 教会-2
牧師-1 --> 教会-3
牧師-2 --> 教会-4
...牧師
-(n-1) --> 教会-0
牧師-n - -> 教会-1
このすべて (O(n)) には非常に単純なループがあります。わかりにくい場合は、紙の上で n=3 と言ってループを試してみることをお勧めします。
ランダム性が必要な場合は、質問を更新してください。
パックスによる編集
それはO(n)であり、編集に対応するための私の拡張は少なくともO(n ^ 2)だったので、私は自分の答えを削除してこれに賛成票を投じています。
牧師-0 から牧師-N までの値のインデックスをランダムにソートされた牧師の配列にすることで、ランダム性を維持することができます。これにより、このソリューションは少なくとも私のものと同じくらい優れたものになります。
PAX による編集の終了