ロト6当選理論

このエントリーをはてなブックマークに追加
60名無しさん@夢いっぱい
/*  renren2 > renren2.txt
   wc -l renren2.txt
以下は、Cのソースコードです。Windowsに、CygwinまたはMinGWをインストールすれば、コンパイルおよび実行が可能です*/
#define BALL_COUNT 43 /* LOTO6 */
#include <stdio.h>
int main(void) {
  char c[ BALL_COUNT + 1 ][4]; /* "", "01 ", "02 ", "03 ", ..., "43 " */
  int i, k, m, n, p, q, r;
  c[0][0] = '\0';
  for(i = 1; i <= BALL_COUNT; i++) sprintf(&c[i][0], "%02d ", i);
  for(i = 1; i <= BALL_COUNT; i++) {
    for(k = i + 1; k <= BALL_COUNT; k++) {
      for(m = k + 1; m <= BALL_COUNT; m++) {
        for(n = m + 1; n <= BALL_COUNT; n++) {
          for(p = n + 1; p <= BALL_COUNT; p++) {
            for(q = p + 1; q <= BALL_COUNT; q++) {
              r = 0;
              if(k == i + 1) r++;
              if(m == k + 1) r++;
              if(n == m + 1) r++;
              if(p == n + 1) r++;
              if(q == p + 1) r++;
              if(r == 2) {
                fputs(&c[i][0], stdout); fputs(&c[k][0], stdout); fputs(&c[m][0], stdout);
                fputs(&c[n][0], stdout); fputs(&c[p][0], stdout); fputs(&c[q][0], stdout);
                fputc('\n', stdout);
              }
            }}}}}}
  return 0;
}
61名無しさん@夢いっぱい:2013/06/18(火) 12:52:40.49 ID:02iXNmw8
コンパイルする前に、>>60の全角空白を2個の半角空白に置換してください
62名無しさん@夢いっぱい:2013/06/18(火) 12:55:19.17 ID:02iXNmw8
>>60は、連番が2か所ある場合のみ、ロト6の組合せを出力します。
if(r == 2)にある2を変更すれば、他の場合も出力できます。
63名無しさん@夢いっぱい:2013/06/18(火) 12:56:57.85 ID:02iXNmw8
連番がない組合せは、2760681とおり。>>7に一致した。
連番が1か所ある組合せは、2509710とおり。
連番が2か所ある組合せは、738150とおり。例、17 19 21 22 36 37 / 08 10 11 12 20 40
連番が3か所ある組合せは、84360とおり。例、25 26 27 28 35 38 / 04 30 31 36 37 38
連番が4か所ある組合せは、3515とおり。例、19 20 21 24 25 26 / 04 05 06 09 10 11
連番が5か所ある組合せは、38とおり。例、01 02 03 04 05 06 / 38 39 40 41 42 43

 2760681 + 2509710 + 738150 + 84360 + 3515 + 38 = 6096454
 43C6 = 6096454
一致した!