2ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

C言語でロト6予想プログラム作成

1 :名無しさん@夢いっぱい:2006/09/18(月) 02:13:24 ID:e8VRFwBo
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int GetRandom(int min,int max);

int main(void)
{
int i;

srand((unsigned int)time(NULL));

for (i = 0;i < 100;i++) {
printf("%03d\n",GetRandom(0,999));
}

return 0;
}

int GetRandom(int min,int max)
{
return min + (int)(rand()*(max-min+1.0)/(1.0+RAND_MAX));
}

これを実行するとナンバーズ3100回試行
ロト6はむずい・・・

2 :名無しさん@夢いっぱい:2006/09/18(月) 02:18:45 ID:bC3GzcWi
言語の問題なのか?

3 :名無しさん@夢いっぱい:2006/09/18(月) 02:20:51 ID:7H0s5HK4
明日仕事だから寝る!

4 :名無しさん@夢いっぱい:2006/09/18(月) 02:22:42 ID:CbjB5Cia
stdlib.hのrand()は、つかいもんにならない

5 :名無しさん@夢いっぱい:2006/09/18(月) 02:27:40 ID:e8VRFwBo
#include <chinpo.h>

6 :名無しさん@夢いっぱい:2006/09/18(月) 11:36:45 ID:N6sdA750
ここ石豆の気配がするな。

7 :名無しさん@夢いっぱい:2006/09/18(月) 11:46:38 ID:ivMn79LN
『良い乱数・悪い乱数』
ttp://www001.upp.so-net.ne.jp/isaku/rand.html
「C言語標準ライブラリの乱数rand( )は質に問題があり、ゲームでも使わないのが普通」

「乱数ではメルセンヌ・ツイスタ」

『 Mersenne Twister: A random number generator (since 1997/10)』
ttp://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/mt.html

8 :名無し:2006/09/19(火) 09:40:01 ID:GJuEXCln
このスレッドは重複です。以下のスレッドに移動願います。

ロト6の予想ソフトウェア作るぜ
ttp://money4.2ch.net/test/read.cgi/loto/1141575854/

9 :名無しさん@夢いっぱい:2006/09/19(火) 21:25:30 ID:RhTmZqWh
このスレはC言語を指定してるので安心だ

10 :名無しさん@夢いっぱい:2006/09/22(金) 23:12:33 ID:8EWubpJz
ttp://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/MT2002/mt19937ar.html メルセンヌ・ツイスタ
gzipped tar-file of these files: mt19937ar.sep.tgz .
                       ↑      
                     この圧縮ファイルをダウンロードする。

WindowsパソコンにCygwinをインストールした状態でtar(xzfオプション)により展開した。
$ tar xzf mt19937ar.sep.tgz
$ ls -l mt*
-rw-------  1 UserName  なし     5996 Apr 26 2005 mt19937ar.c
-rw-------  1 UserName  なし     2928 Apr 26 2005 mt19937ar.h
-rw-------  1 UserName  なし    22465 Mar 2 2004 mt19937ar.out
-rwxr-xr-x  1 UserName  なし    15433 Sep 19 23:38 mt19937ar.sep.tgz
-rw-------  1 UserName  なし     2539 Apr 26 2005 mtTest.c

11 :名無しさん@夢いっぱい:2006/09/22(金) 23:34:42 ID:Bfz5G5SZ
>>9
スレッドが立てられた日付はこちらの方が後であり、
>>8のスレッドでも問題なく話ができることを考えると
削除ガイドライン
ttp://info.2ch.net/guide/adv.html
の要件は満たしていると言える。

ただ現在の宝くじ板は過疎であり、スレッド保持上限値にかなり余裕があり
多少の重複スレや駄スレが立っても、そのせいで有用なスレッドがはじきだされる
心配はなく、少数の潔癖症の方々が気分を悪くするだけで大した問題ではない
と思われる。

12 :石豆 ◆urzs4gq/xc :2006/09/23(土) 22:39:19 ID:FNmFKtdB
>>11を言い直してみる。

このスレッドが扱う話題は>>8のスレッドの話題の範囲に完全に含まれる。
そして>>8のスレッドはこのスレッドが建つ前からあり、
建った時点において>>8のスレッドが他の言語によるプログラムの
話題に占有されていたという事態は見受けられない。つまり新たにスレッドを建てる
までもなく、ここでの話は>>8のスレッドですることができた。
>>1は建てる必要のないスレッドを建ててしまった。
しかし宝くじ板のスレッド数上限800にはまだ余裕があり、今回は大目に見てもいいだろう。

13 :名無しさん@夢いっぱい:2006/09/24(日) 20:24:53 ID:1YEhFxnW
夢ロトくんは攪拌してからボールの列を形成して6個摘出するが、
以下のプログラムでは攪拌しないで列からメルセンヌ・ツイスタにより6個摘出する。
(予想ではなく6個でたらめに摘出する。)

main()
1.43個のボールをノードとする線形リストを形成する。
2.6個のボールを摘出する。
3.工程1および工程2を反復する。

pLine()
1.何番目のボールを摘出するか、ノードの番号iNを決定する。
2.iN番目のボールの値(文字列)を配列に記憶する。
3.iN番目のボールを破棄して線形リストを短縮する。
4.工程1、工程2、工程3を反復する。
5.配列をソートする。
6.表示を開始する行以降である場合、配列の要素からなる1行を出力する。

【使用法】引き数の個数が4個ではない場合、使用例を表示する。
mtNtoR 43 6 1001 1020

ロト6のボールの総数:43
摘出するボールの個数:6
表示を開始する行番号:1001
反復する回数:1020

この使用例では20行表示される。メルセンヌ・ツイスタの設定を変更するにはmtNtoR.cにおいて
/* メルセンヌ・ツイスタの設定 */
 unsigned long init[4] = {0x123, 0x234, 0x345, 0x456}, length = 4;
を変更してコンパイルする。

14 :名無しさん@夢いっぱい:2006/09/24(日) 20:25:47 ID:1YEhFxnW
/* 【ファイル名】mtNtoR.h
bcc32 -emtNtoR mtNtoR.c pNew.c pLine.c iPick.c mt19937ar.c
gcc -o mtntor mtNtoR.c pNew.c pLine.c iPick.c mt19937ar.c
*/
#define USAGE "mtNtoR 43 6 1001 1020\n"
#define EXTRACT 43/* EXTRACT ≦ BALL_COUNT */
#define BALL_COUNT 43
#define DIGITS 3
#define WEIGHT 14.09
#define SKIP 1
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include "mt19937ar.h"

typedef struct sBall sBall;
struct sBall {
 char *pBall;
 double dWeight;
 sBall *pNext;
};

int iCompare(const void *p, const void *p2) {
 return strcmp((char *)p, (char *)p2);
}
extern sBall *pNew(char *, double);
extern sBall *pAdd(sBall *, sBall *);
extern void FreeAll(sBall *);
extern sBall *pLine(sBall *, int, int, int);

15 :名無しさん@夢いっぱい:2006/09/24(日) 20:26:32 ID:1YEhFxnW
/* 【ファイル名】mtNtoR.c */
#include "mtNtoR.h"
int main(int argc, char *argv[]) {
 sBall *pMin;
 sBall *p;
 char cBall[BALL_COUNT][DIGITS];
 int i, iCount, iE, iRepeat, iLine, iShow, iSkip;
 char *pStop;
 char *pBall;
/* メルセンヌ・ツイスタの設定 */
 unsigned long init[4] = {0x123, 0x234, 0x345, 0x456}, length = 4;
/* 入力 */
 switch(argc) {
 case 5:
  iCount = (int)strtol(argv[1], &pStop, 0);/* ボールの総数 */
  if(iCount > BALL_COUNT) {
   fprintf(stderr, "main(): iCount > BALL_COUNT\n");
   exit(EXIT_FAILURE);
  }
  iE = (int)strtol(argv[2], &pStop, 0);/* 摘出する個数 */
  iShow = (int)strtol(argv[3], &pStop, 0);/* 表示を開始する行 */
  iRepeat = (int)strtol(argv[4], &pStop, 0);/* 反復する回数 */
  break;
 default:
  fprintf(stderr, USAGE);
  exit(EXIT_FAILURE);
 }
/* 設定 */
 for(i=0; i<iCount; ) {
  pBall = &cBall[i][0];
  sprintf(pBall, "%02d", ++i);/* cBall[0] = "01", cBall[42] = "43" */
 }/* ボールの数値(最小値は1であり最大値はiCountである)を文字列として記憶した */
 init_by_array(init, length);/* メルセンヌ・ツイスタの初期化 */
/* 反復(注1) */
 iSkip = SKIP;/* 表示しない */
 for(iLine = 1; iLine <= iRepeat; iLine++) {
  pMin = NULL;/* ボールが無い状態 */
  for(i = iCount - 1; i >= 0; i--) {/* 最大値のボールから順に生成、連結する */
   pBall = &cBall[i][0];
   p = pNew(pBall, WEIGHT);/* ボールを生成した */
   pMin = pAdd(pMin, p);/* ボールを連結した */
  }

  if(iLine >= iShow)
   iSkip = 0;/* 表示する */

  pMin = pLine(pMin, iCount, iE, iSkip);/* iCount個からiE個を摘出した */
  FreeAll(pMin);/* 残りのボールを破棄した */
 }
 return EXIT_SUCCESS;
}

16 :名無しさん@夢いっぱい:2006/09/24(日) 20:27:28 ID:1YEhFxnW
/* 【ファイル名】pNew.h */
#include <stdio.h>
#include <stdlib.h>
typedef struct sBall sBall;
struct sBall {
 char *pBall;
 double dWeight;
 sBall *pNext;
};
/* mtNtoR.hにおいて #define WEIGHT 14.09
dWeight = WEIGHT
このバージョンではdWeightを活用していない */

17 :名無しさん@夢いっぱい:2006/09/24(日) 20:28:31 ID:1YEhFxnW
/* 【ファイル名】pNew.c */
#include "pNew.h"
sBall *pNew(char *pBall, double dWeight) {
 sBall *p;
 p = (sBall *)malloc(sizeof(sBall));
 if(p == NULL) {
  fprintf(stderr, "pNew(): p == NULL\n");
  exit(EXIT_FAILURE);
 }

 p->pBall = pBall;/* 文字列としてボールの値を記憶した */
 p->dWeight = dWeight;
 p->pNext = NULL;/* pAdd()によってpNextを決定する */
 return p;
}

sBall *pAdd(sBall *pMin, sBall *p) {
 p->pNext = pMin;/* ボールを連結した */
 return p;/* pMin = pAdd()とすることによってpMinを更新する */
}

void FreeAll(sBall *pMin) {
 sBall *p;
/* 現在の最小値のボールから順に破棄する */
 while(pMin != NULL) {
  p = pMin->pNext;
  free(pMin);
  pMin = p;
 }
}

18 :名無しさん@夢いっぱい:2006/09/24(日) 20:29:40 ID:1YEhFxnW
/* 【ファイル名】pLine.h */
#define EXTRACT 43/* EXTRACT ≦ BALL_COUNT */
#define BALL_COUNT 43
#define DIGITS 3
#include <stdio.h>
#include <stdlib.h>

typedef struct sBall sBall;
struct sBall {
 char *pBall;
 double dWeight;
 sBall *pNext;
};

extern int iPick(int);
extern sBall *pShorten(sBall *p, sBall *, sBall *);
extern int iCompare(const void *, const void *);

19 :名無しさん@夢いっぱい:2006/09/24(日) 20:30:31 ID:1YEhFxnW
/* 【ファイル名】pLine.c */
#include "pLine.h"
sBall *pLine(sBall *pMin, int iCount, int iE, int iSkip) {
 char c[EXTRACT][DIGITS];
 sBall *p;
 sBall *pOld;
 int i, iN, iPicked;
/* 反復(注2) */
 for (iPicked = 0; iPicked < iE; iPicked++) {
  iN = iPick(iCount);/* ノードの番号を決定した(1 ≦ iN ≦ iCount) */
  p = pMin;/* 現在の最小値のボール */
  pOld = NULL;/* 先頭のボールより前方にはボールが存在しない */
  for(i = 1; i != iN; i++) {
   pOld = p;
   p = p->pNext;
  };
  sprintf(&c[iPicked][0], "%s", p->pBall);/* iN番目のボールの値(文字列)を配列に記憶した */
  pMin = pShorten(pMin, pOld, p);/* iN番目のボールを破棄した */
  iCount--;/* 摘出したためボールの総数が減少した */
 }

 if(iSkip == 0) {/* 表示する */
  qsort(&c[0][0], iE, DIGITS, iCompare);/* 配列をソートした */
  for(i = 0; i < iE; i++) {
   printf(" %s", &c[i][0]);/* 配列の要素を出力した */
  }
  putchar('\n');/* 改行した */
 }
 return pMin;
}

20 :名無しさん@夢いっぱい:2006/09/24(日) 20:31:29 ID:1YEhFxnW
/* 【ファイル名】iPick.h */
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include "mt19937ar.h"

typedef struct sBall sBall;
struct sBall {
 char *pBall;
 double dWeight;
 sBall *pNext;
};

21 :名無しさん@夢いっぱい:2006/09/24(日) 20:32:28 ID:1YEhFxnW
/* 【ファイル名】iPick.c */
#include "iPick.h"
int iPick(int i) {
 int iN;
 double d;

 if(i <= 0) {
  fprintf(stderr, "iPick(): i <= 0\n");
  exit(EXIT_FAILURE);
 }

 d = genrand_real2();/* 区間[0,1)にある値をメルセンヌ・ツイスタにより決定した */
 d = d*(double)i;
 iN = 1 + (int)floor(d);/* 切上げ */
 return iN;/* 1 ≦ iN ≦ i */
}

sBall *pShorten(sBall *pMin, sBall *pOld, sBall *p) {
 if(pOld == NULL) {/* 最小値のボールより前方にはボールが存在しない */
  pMin = p->pNext;/* 直後のボールを最小値のボールにした */
 } else if(p->pNext == NULL) {/* 最大値のボールより後方にはボールが存在しない */
  pOld->pNext = NULL;/* 直前のボールを最大値のボールにした */
 } else {
  pOld->pNext = p->pNext;/* iN番目のボールを迂回した */
 }

 free(p);/* iN番目のボールを破棄した */
 return pMin;
}

22 :名無しさん@夢いっぱい:2006/09/24(日) 20:33:59 ID:1YEhFxnW
【コンパイル】エディタによって全角の空白文字(シフトJISコード8140h)をタブ文字(\tすなわち09h)または半角の空白文字に変換する必要がある。上記のファイルと一緒にmt19937ar.hおよびmt19937ar.cを用意する。
1.Windows 98のMS-DOSプロンプト、Windows 2000のコマンドプロンプトにおいて
ボーランドのコンパイラbcc32をインストールした場合
bcc32 -emtNtoR mtNtoR.c pNew.c pLine.c iPick.c mt19937ar.c

2.WindowsパソコンにCygwinをインストールした場合
gcc -o mtntor mtNtoR.c pNew.c pLine.c iPick.c mt19937ar.c

23 :名無しさん@夢いっぱい:2006/09/24(日) 20:35:09 ID:1YEhFxnW
【実行例】ロト6
B:\BCC>mtntor 43 6 1001 1020
03 12 16 23 24 41
15 18 23 28 37 42
14 17 18 34 37 43
14 15 17 40 41 42
03 04 15 18 21 33
06 24 31 32 34 39
01 13 15 18 28 37
08 10 11 24 29 33
14 25 28 32 36 42
03 05 08 26 32 34
11 14 19 26 30 40
10 12 21 24 38 43
01 03 10 19 32 35
10 17 24 29 30 35
02 17 23 32 39 40
05 10 24 25 33 38
02 07 17 25 28 37
05 07 15 28 30 34
01 12 32 33 39 42
03 17 22 25 26 31

B:\BCC>

24 :名無しさん@夢いっぱい:2006/09/24(日) 20:36:10 ID:1YEhFxnW
【実行例】ミニロト
D:\BCC>mtntor 31 5 1001 1020
05 11 19 23 30
06 15 21 27 30
02 04 24 26 29
03 05 18 22 26
02 08 10 22 25
01 03 12 16 20
05 08 09 13 25
05 09 16 23 26
02 03 10 20 23
02 05 08 10 28
11 14 20 26 27
03 13 14 23 29
01 10 14 24 27
04 10 14 16 22
07 10 26 28 30
02 19 26 28 31
20 23 24 26 27
17 20 21 22 27
02 06 13 15 24
04 09 22 23 27

D:\BCC>

25 :名無しさん@夢いっぱい:2006/09/24(日) 20:37:38 ID:1YEhFxnW
【実行例】ナンバーズ4のシングルのボックス
ただし、0〜9ではなく01〜10を出力するため、たとえば 02 03 05 10は1249と解釈する。
D:\BCC>mtntor 10 4 1001 1020
02 03 05 10
05 07 08 09
01 04 06 08
04 07 08 09
05 07 08 09
01 07 09 10
01 02 04 05
01 02 03 04
02 05 07 08
02 06 08 10
04 06 07 08
01 02 04 07
04 06 07 10
01 02 06 10
01 02 03 05
04 07 09 10
04 05 07 09
01 02 03 08
01 03 05 10
01 06 08 10

D:\BCC>

26 :名無しさん@夢いっぱい:2006/09/24(日) 20:48:43 ID:1YEhFxnW
/* >>15 (注1)
1.iCount個のボールをノードとする線形リストを形成する
2.iE個のボールを摘出する
3.工程1および工程2を反復する */

/* >>19 (注2)
1.何番目のボールを摘出するか、ノードの番号iNを決定する
2.iN番目のボールの値(文字列)を配列に記憶する
3.iN番目のボールを破棄して線形リストを短縮する
4.工程1、工程2、工程3を反復する
5.配列をソートする
6.配列の要素からなる1行を出力する */


27 :名無しさん@夢いっぱい:2006/09/25(月) 00:34:22 ID:z8jHaYTJ

★ロト6 H18/09/21 第309回 01 04 26 36 41 42 (09)
1等小計 800000000 円 = 2 口 × 400000000 円
2等小計 530189000 円 = 22 口 × 24099500 円
3等小計 636204600 円 = 578 口 × 1100700 円
4等小計 561046800 円 = 32619 口 × 17200 円
5等小計 635711000 円 = 635711 口 × 1000 円
全合計 3163151400 円 キャリー 183009018 円
還元額 3346160418 円 還元率 51.0003844 %
販売額 6561049400 円 収益額 3214888982 円

◆ミニロト H18/09/05 第371回 10 12 19 23 31 (27)
1等小計 293107500 円 = 21 口 × 13957500 円
2等小計 21054600 円 = 126 口 × 167100 円
3等小計 36337500 円 = 2907 口 × 12500 円
4等小計 93791500 円 = 85265 口 × 1100 円
全合計 444291100 円 キャリー     0 円
還元額 444291100 円 還元率 44.8144425 %
販売額 991401600 円 収益額 547110500 円

■ナンバーズ4 H18/09/01 第1902回 6275
ストレート 34527500 円 = 25 口 × 1381100 円
ボックス  20182500 円 = 351 口 × 57500 円
Sストレ-ト 48193100 円 = 67 口 × 719300 円
Sボックス 54443900 円 = 1897 口 × 28700 円
全合計 157347000 円 キャリー     0 円
還元額 157347000 円 還元率 44.9538710 %
販売額 350018800 円 収益額 192671800 円

●ナンバーズ3 H18/09/01 第1902回 899
ストレート 9171900 円 = 79 口 × 116100 円
ボックス  9326700 円 = 241 口 × 38700 円
Sストレ-ト 13235400 円 = 171 口 × 77400 円
Sボックス 6407600 円 = 332 口 × 19300 円
ミニ    9372800 円 = 808 口 × 11600 円
全合計 47514400 円 キャリー     0 円
還元額 47514400 円 還元率 44.9579983 %
販売額 105686200 円 収益額 58171800 円


28 :名無しさん@夢いっぱい:2006/09/25(月) 00:47:39 ID:z8jHaYTJ
金融グループで初めての再開・13年ぶり法人税納付へ…大手銀行
http://news18.2ch.net/test/read.cgi/bizplus/1158679980/1-


29 :名無しさん@夢いっぱい:2006/09/25(月) 00:52:56 ID:z8jHaYTJ
C言語でロト6予想プログラム作成 (javascriptも?)
http://money4.2ch.net/test/read.cgi/loto/1158513204/l50

30 :名無しさん@夢いっぱい:2006/09/25(月) 01:04:31 ID:z8jHaYTJ
参考
http://money4.2ch.net/test/read.cgi/loto/1141575854/l50

31 :名無しさん@夢いっぱい:2006/09/27(水) 05:49:58 ID:Nae49S6a
//入力ルーチン
InputData=$.split(" ");

//出力ルーチン
function TableStart(){$+="<table cellspacing=0 cellpadding=3 bgcolor=ffffff bordercolor=black border=1><tbody align=right >";}
function TableText($X,$Y){$+="<tr><td width=50><font size=4><b>"+$X+"</td><td width=250 ><font size=4><b>"+$Y+"</td></tr>";}
function TableEnd(){$+="</table>";} $="";

//表作成ルーチン
TableStart();for ( X=0 ; 1000>=X ; X++ ) { TableText ( X , InputData[ X ].substr( 0 , 20 ) ) ; } TableEnd();

32 :名無しさん@夢いっぱい:2006/09/27(水) 21:40:56 ID:xtBFJyTf
k

33 :名無しさん@夢いっぱい:2006/09/28(木) 21:59:51 ID:551ukRGB
310回結果 03 04 05 18 28 37 (26)

【実行例】ロト6
D:\bcc>mtntor 43 6 125530 125530
03 04 05 18 22 37

D:\bcc>

5個一致('A`)

34 :名無しさん@夢いっぱい:2006/10/06(金) 00:39:38 ID:l9DhKfPh
311回 01 16 22 36 37 42 (34)
D:\bcc>mtntor 43 6 29954 29954
01 04 16 36 37 42

D:\bcc>

35 :名無しさん@夢いっぱい:2006/10/06(金) 00:48:22 ID:jD0Bghnk
えっ?2等?

36 :名無しさん@夢いっぱい:2006/10/06(金) 19:04:25 ID:hjMcbuZj
>>35
3等だよ…でも結果後の晒しじゃ…。

37 :名無しさん@夢いっぱい:2006/10/13(金) 00:45:52 ID:vmFe0pu4
312回結果 02 17 22 29 38 42 (16)

$ mtntor 43 6 14066 14066
17 22 28 29 38 42

('A`)

38 :名無しさん@夢いっぱい:2006/10/13(金) 01:53:19 ID:E+fDH+dI
結果前にださないの?

39 :名無しさん@夢いっぱい:2006/10/13(金) 02:11:12 ID:mUmDoIyo
20万行(四千万円)までで1等も2等もでていない。3等なら7とおりでた。
第312回 5個一致で3等
17 22 28 29 38 42
01 02 22 29 38 42
02 05 17 29 38 42
01 02 17 22 29 42
02 17 22 38 41 42
02 22 29 38 39 42
02 17 22 29 30 42

40 :名無しさん@夢いっぱい:2006/10/13(金) 18:40:55 ID:/2DZh7EY
>>38
結果前だと
ピンポイントで14066桁目や29954桁目が3等と一致する
なんて解らないだろ。所詮は結果論。

41 :名無しさん@夢いっぱい:2006/10/13(金) 19:17:36 ID:E+fDH+dI
>>40
確かにわからない…。
だいたいが使い方さえ理解できてないし。
でこれってもう完成したの?

42 :名無しさん@夢いっぱい:2006/10/13(金) 19:24:20 ID:JPUT5hMD
>>41
ソースが公開されているのに文句いうな

43 :名無しさん@夢いっぱい:2006/10/17(火) 22:29:56 ID:a0TcuvCU
何故に今更、構造化言語? オブジェクト指向でいこうよ


44 :石豆 ◆urzs4gq/xc :2006/10/17(火) 22:35:01 ID:8QUqaNke
ではスレを建てるといい。

45 :名無しさん@夢いっぱい:2006/10/17(火) 22:52:40 ID:a0TcuvCU
やだ、94.28%の確立で五等が当たるプログラムが完成していますので晒さないと
スレ立てた意味が無くなるから。

46 :名無しさん@夢いっぱい:2006/10/18(水) 00:28:31 ID:JkIHbhGs
>>45
>>45

47 :名無しさん@夢いっぱい:2006/10/18(水) 08:13:59 ID:8L+Qx3ld
確率を確立と書く確率94.28%!

48 :鬱万長者 ◆M.UTUMAN.A :2006/10/28(土) 18:27:44 ID:LrSgGQJV
♪強そうに 生きてゆ〜くよりも〜

49 :名無しさん@夢いっぱい:2006/10/30(月) 00:36:07 ID:QSE085ma
loto6 100口、ダブりあり、gawk

BEGIN{
srand()

for(j=0;j<100;j++){
for(i=0;i<43;i++)
a[i]=0

for(i=0;i<6;i++){
do {
x = int(rand()*43)
} while( a[x] == 1 )
a[x]=1
}

for(i=0;i<43;i++)
if( a[i]==1 )
printf "%02d ", i+1
print ""
}
}

予想なんて不可能なんだから、適当に乱数でいいよ

50 :名無しさん@夢いっぱい:2006/10/30(月) 14:21:54 ID:4lcElYS1
main() {
if( money > 50000 ) {
}


51 :名無しさん@夢いっぱい:2006/11/01(水) 10:47:42 ID:gbRaXuAo
適当な乱数ならQPと同じじゃないか?

52 :名無しさん@夢いっぱい:2006/11/03(金) 10:49:20 ID:xEnCYmOo
>>51
クイックピックが乱数であるとは、どこにもかかれていない

53 :名無しさん@夢いっぱい:2006/11/03(金) 10:55:02 ID:xEnCYmOo
315回 01 02 17 24 40 41 (31)

I:\bcc>mtntor 43 6 2508 2508
01 02 17 24 41 43

I:\bcc>

二十万口(四千万円)で3等が6口でた
01 02 17 24 41 43
01 02 06 17 24 40
01 02 06 24 40 41
01 17 24 33 40 41
01 02 20 24 40 41
01 02 03 17 40 41

54 :名無しさん@夢いっぱい:2006/11/12(日) 22:27:31 ID:ttRZdojW
#include <stdio.h> /* >>49 メルセンヌ・ツイスタ版 */
#include <stdlib.h> /* 【ファイル名】loto6.c */
#include <time.h> /* 【コンパイル】bcc32 loto6.c mt19937ar.c */
#include <math.h> /* gcc -o loto6 loto6.c mt19937ar.c */
#include "mt19937ar.h"
int main(void) {
 int a[43];
 int j, i, x;
/* メルセンヌ・ツイスタの設定 */
 unsigned long init[4] = {0x123, 0x234, 0x345, 0x456}, length = 4;
 init[0] = (unsigned long)time(NULL);
 init_by_array(init, length);/* メルセンヌ・ツイスタの初期化 */
 for(j = 0; j < 100; j++){
  for(i = 0; i < 43; i++)
   a[i] = 0;/* 印が無い */
/* 6個の印をつける */
  for(i = 0; i < 6; i++){
   do { /* 区間[0,43)にある値をメルセンヌ・ツイスタにより決定する */
    x = (int)floor(genrand_real2()*43.);/* xは整数(0 ≦ x ≦ 42) */
   } while( a[x] == 1 );/* すでに印があるため、やりなおす */
   a[x] = 1;/* 印が無ければ印をつける */
  }
  for(i = 0; i < 43; i++) /* 出力は昇順になる */
   if( a[i] == 1 ) /* a[0]は01、a[1]は02、a[42]は43に対応している */
    printf("%02d ", i + 1);

  printf("\n");/* 改行した */
 }
 return EXIT_SUCCESS;
}

55 :名無しさん@夢いっぱい:2006/11/12(日) 22:34:18 ID:ttRZdojW
【実行例】出力をリダイレクトするには
D:\bcc>loto6 > loto6.txt

D:\bcc>

loto6.txtのファイルをエディタでみる

56 :名無しさん@夢いっぱい:2006/11/12(日) 22:39:49 ID:ttRZdojW
>>49さん、おもしろいアルゴリズムをおしえてくださってありがとうございます

57 :名無しさん@夢いっぱい:2006/11/13(月) 10:22:35 ID:fma5AE7U
夢ロトくんは攪拌してからボールの列を形成して6個摘出するが、
以下のプログラム(mtNtoR Version 1.2)では攪拌しないで
列からメルセンヌ・ツイスタにより6個摘出する。

設定ファイルにしたがってボールに重みを付与できる。
重みを均等にすれば旧バージョン>>14-21と同一の出力になる。

main()
1.設定ファイルからパラメータを取得する(pFile,iCount,iE,iShow,iRepeat,cBall[][],dWeight[])
2.必要に応じてログファイルを追加モードでオープンする(pFile)
3.iCount個のボールをノードとするリストを形成する(数字はcBall[][]、重みはdWeight[])
4.iE個のボールを摘出して、表示開始行以降ならば表示する(iShow)
5.残りのボールを破棄する。
6.工程3、工程4、工程5を反復する(iRepeat)

pLine()
1.iE個のボールを摘出して、配列にボールの数字を記憶する。
2.表示開始行以降ならば配列をソートする。
3.ソートされた配列要素からなる出力文字列を生成する。
4.1行表示する。
5.必要に応じてログファイルに追加する。

pPick()
1.ボールの重みの総和dを計算する。
2.区間[0,d)にある値をメルセンヌ・ツイスタにより決定する(dPick < d)
3.再びボールの重みを加算していきdPickを超えたときボールを決定する(p)
4.pのボールの数字を配列に記憶する。
5.pのボールを破棄してリストを短縮する。

ボールが重いほど出現しやすい。

58 :名無しさん@夢いっぱい:2006/11/13(月) 10:23:41 ID:fma5AE7U
#【ファイル名】mtNtoR.ini
0x123, 0x234, 0x345, 0x456, 4 # メルセンヌ・ツイスタの設定
Xto6 # 摘出するボールの個数は6
Log mtNtoR.txt # ログファイルを指定できるが必須ではない

  From 1001 # 表示を開始する行番号
Repeat 1020 # 反復する回数

01 14.09
02 14.09
03 14.09
04 14.09
05 14.09
06 14.09
07 14.09
08 14.09
09 14.09
10 14.09
11 14.09
12 14.09
13 14.09
14 14.09
15 14.09
16 14.09
17 14.09
18 14.09
19 14.09
20 14.09
21 14.09
22 14.09
23 14.09
24 14.09
25 14.09
26 14.09
27 14.09
28 14.09
29 14.09
30 14.09
31 14.09
32 14.09
33 14.09
34 14.09
35 14.09
36 14.09
37 14.09
38 14.09
39 14.09
40 14.09
41 14.09
42 14.09
43 14.09

59 :名無しさん@夢いっぱい:2006/11/13(月) 10:24:44 ID:fma5AE7U
/* 【ファイル名】mtNtoR.h
2006-11-13 Version 1.2
【コンパイル】bcc32 -emtNtoR mtNtoR.c pPick.c pLine.c pSetting.c pNew.c pShorten.c mt19937ar.c
gcc -o mtntor mtNtoR.c pPick.c pLine.c pSetting.c pNew.c pShorten.c mt19937ar.c
*/
#define EXTRACT 43/* EXTRACT ≦ BALL_COUNT */
#define BALL_COUNT 43
#define DIGITS 3
#define SKIP 1
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct sBall sBall;
struct sBall {
 char *pBall;
 double dWeight;
 sBall *pNext;
};

int iCompare(const void *p, const void *p2) {
 return strcmp((char *)p, (char *)p2);
}
extern FILE *pSetting(int, char *, int *, int *, int *, int *, char *, double *);
extern sBall *pNew(char *, double);
extern sBall *pAdd(sBall *, sBall *);
extern sBall *pLine(sBall *, int, int, int, FILE *);
extern void FreeAll(sBall *);

60 :名無しさん@夢いっぱい:2006/11/13(月) 10:25:36 ID:fma5AE7U
/* 【ファイル名】mtNtoR.c */
#include "mtNtoR.h"
int main(int argc, char *argv[]) {
 double dWeight[BALL_COUNT];
 char cBall[BALL_COUNT][DIGITS];
 FILE *pFile;
 sBall *pMin;
 sBall *p;
 int i, iCount, iE, iShow, iRepeat, iSkip, iLine;
/* 設定 */
 pFile = pSetting(argc, argv[1], &iCount, &iE, &iShow, &iRepeat, &cBall[0][0], &dWeight[0]);
/* 反復(リストを形成、ボールを摘出、ボールを破棄) */
 iSkip = SKIP;/* 表示しない */
 for(iLine = 1; iLine <= iRepeat; iLine++) {
  pMin = NULL;/* ボールが無い状態 */
  for(i = iCount - 1; i >= 0; i--) {/* 末尾のボールから順に生成、連結する */
   p = pNew(&cBall[i][0], dWeight[i]);/* ボールを生成した */
   pMin = pAdd(pMin, p);/* ボールを連結した */
  }
  if(iLine >= iShow)
   iSkip = 0;/* 表示する */

  pMin = pLine(pMin, iCount, iE, iSkip, pFile);/* iCount個からiE個を摘出した */
  FreeAll(pMin);/* 残りのボールを破棄した */
 }
 if(pFile != NULL)
  fclose(pFile);

 return EXIT_SUCCESS;
}

61 :名無しさん@夢いっぱい:2006/11/13(月) 10:26:34 ID:fma5AE7U
/* 【ファイル名】pPick.h */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include "mt19937ar.h"

typedef struct sBall sBall;
struct sBall {
 char *pBall;
 double dWeight;
 sBall *pNext;
};

extern sBall *pShorten(sBall *, sBall *, sBall *);

62 :名無しさん@夢いっぱい:2006/11/13(月) 10:28:08 ID:fma5AE7U
#include "pPick.h" /* 【ファイル名】pPick.c */
sBall *pPick(sBall *pMin, int iCount, char *pPicked) {
 double d, dPick;
 sBall *p;
 sBall *pOld;
 if(iCount <= 0) {
  fprintf(stderr, "pPick(): iCount <= 0\n");
  exit(EXIT_FAILURE);
 }
 d = 0.;
 p = pMin;/* 現在の先頭のボール */
 do {/* dWeightを加算していき、dWeightの総和を計算する */
  d = d + p->dWeight;
  p = p->pNext;
 } while(p != NULL);
 dPick = d * genrand_real2();/* 区間[0,d)にある値をメルセンヌ・ツイスタにより決定した */
 d = 0.;
 p = pMin;/* 現在の先頭のボール */
 pOld = NULL;/* 先頭のボールより前方にはボールが存在しない */
 for(;;) {/* 再度、dWeightを加算していく */
  d = d + p->dWeight;
  if(d > dPick)
   break;/* メルセンヌ・ツイスタによる値を超えたためボールを決定した(pを摘出) */

  pOld = p;
  p = p->pNext;
 }
 strcpy(pPicked, p->pBall);/* pのボールの値(文字列)を配列に記憶した */
 return pShorten(pMin, pOld, p);/* pのボールを破棄した */
}

63 :名無しさん@夢いっぱい:2006/11/13(月) 10:29:38 ID:fma5AE7U
/* 【ファイル名】pLine.h */
#define OUTPUT 130
#define EXTRACT 43/* EXTRACT ≦ BALL_COUNT */
#define BALL_COUNT 43
#define DIGITS 3
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct sBall sBall;
struct sBall {
 char *pBall;
 double dWeight;
 sBall *pNext;
};

extern sBall *pPick(sBall *, int, char *);
extern int iCompare(const void *, const void *);

64 :名無しさん@夢いっぱい:2006/11/13(月) 10:30:43 ID:fma5AE7U
/* 【ファイル名】pLine.c */
#include "pLine.h"
sBall *pLine(sBall *pMin, int iCount, int iE, int iSkip, FILE *pFile) {
 char *pC;
 char cOut[OUTPUT];
 char c[EXTRACT][DIGITS];
 int i;
/* 反復(注2) */
 for (i = 0; i < iE; i++) {
  pMin = pPick(pMin, iCount, &c[i][0]);
  iCount--;/* 摘出したためボールの総数が減少した */
 }

 if(iSkip == 0) {
/* 表示する */
  qsort(&c[0][0], iE, DIGITS, iCompare);/* 配列をソートした */
  cOut[0]='\0';/* 出力文字列の長さを零にした */
  pC=&cOut[0];
  for(i = 0; i < iE; i++) {
   strcat(pC, " ");
   strcat(pC, &c[i][0]);/* 出力文字列に配列要素の文字列を追加した */
  }

  strcat(pC, "\n");/* 出力文字列に改行文字を追加した */
  fputs(pC, stdout);/* 1行表示した */
  if(pFile != NULL)
   fputs(pC, pFile);/* ログファイルに1行追加した */
 }
 return pMin;
}

65 :名無しさん@夢いっぱい:2006/11/13(月) 10:31:54 ID:fma5AE7U
/* 【ファイル名】pSetting.h */
#define USAGE "mtNtoR mtNtoR.ini\n"
#define LOG "Log"
#define REPEAT "Repeat"
#define FROM "From"
#define XTO "Xto" /* Xto6 */
#define SETTING 80
#define FILE_NAME 80
#define LINES 70
#define BALL_COUNT 43
#define DIGITS 3
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include "mt19937ar.h"

66 :名無しさん@夢いっぱい:2006/11/13(月) 10:36:12 ID:fma5AE7U
#include "pSetting.h" /* 【ファイル名】pSetting.c */
FILE *pSetting(int iArg, char *pArg, int *pCount, int *pE, int *pShow, int *pRepeat, char *pBall, double *pWeight) {
 char cFile[FILE_NAME], c[SETTING];
 char *pC;
 char *pStop;
 FILE *pFile;
 int i, iLine, iS;
 unsigned long length, init[4];
 switch(iArg) {
 case 2:
  pFile = fopen(pArg, "rt");/* 設定ファイルをオープンした */
  if(pFile == NULL) {
   fprintf(stderr, "pSetting(): pFile == NULL (%s)\n", pArg);
   exit(EXIT_FAILURE);
  }
  break;
 default:
  fprintf(stderr, USAGE);
  exit(EXIT_FAILURE);
 }
 cFile[0]='\0';
 *pE = 0;
 *pShow = 1;
 *pRepeat = 0;
 i = 0;
 for(iLine = 0; iLine < LINES; iLine++) {
  pC = fgets(c, SETTING, pFile);
  if(pC == NULL)
   break;

  pC = strchr(c, '\n');
  if(pC == NULL) {
   fprintf(stderr, "pSetting(): pC == NULL\n");/* 改行文字が無かった */
   exit(EXIT_FAILURE);
  }
  *pC = '\0';/* 改行文字を削除した */
  pC = strchr(c, '#');
  if(pC != NULL)
   *pC = '\0';/* コメントを削除した */
/* メルセンヌ・ツイスタの設定 */
  pC = strstr(c, "0x");
  if(pC != NULL) {
   iS = sscanf(c, "%lx, %lx, %lx, %lx, %ld", &init[0], &init[1], &init[2], &init[3], &length);
   if(iS != 5) {
    fprintf(stderr, "pSetting(): iS != 5\n");
    exit(EXIT_FAILURE);
   }
   init_by_array(init, length);/* メルセンヌ・ツイスタの初期化 */
   continue;
  }
  pC = strstr(c, XTO);/* つづく */

67 :名無しさん@夢いっぱい:2006/11/13(月) 10:37:29 ID:fma5AE7U
  if(pC != NULL) {/* >>66のつづき */
   pC = pC + strlen(XTO);
   *pE = (int)strtol(pC, &pStop, 0);/* 摘出する個数 */
   continue;
  }
  pC = strstr(c, LOG);
  if(pC != NULL) {
   pC = pC + strlen(LOG);
   sscanf(pC, " %s", &cFile[0]);
   continue;
  }
  pC = strstr(c, FROM);
  if(pC != NULL) {
   pC = pC + strlen(FROM);
   *pShow = (int)strtol(pC, &pStop, 0);/* 表示を開始する行 */
   continue;
  }
  pC = strstr(c, REPEAT);
  if(pC != NULL) {
   pC = pC + strlen(REPEAT);
   *pRepeat = (int)strtol(pC, &pStop, 0);/* 反復する回数 */
   continue;
  }
  if(i >= BALL_COUNT)
   continue;
/* ボールの数字(文字列)を配列に記憶する */
  pC = &c[0];
  iS = sscanf(pC, "%s %lf", pBall, pWeight);
  if(iS == 2) {
   i++;
   pWeight++;
   pBall = pBall + DIGITS;
   continue;
  } else if(iS == EOF) {
   continue;
  } else {
   fprintf(stderr, "pSetting(): iS != 2(%s)\n", pC);
   exit(EXIT_FAILURE);
  }
 }
 *pCount = i;
 fclose(pFile);/* 設定ファイルをクローズした */
 if(cFile[0]=='\0') {
  pFile = NULL;/* ログファイルをオープンしない */
 } else {
  pFile = fopen(cFile, "at");/* ログファイルをオープンした */
  if(pFile == NULL) {
   fprintf(stderr, "pSetting(): pFile == NULL(%s)\n", &cFile[0]);
   exit(EXIT_FAILURE);
  }
 }
 if(*pRepeat == 0) {
  fprintf(stderr, "pSetting(): *pRepeat == 0\n");
  exit(EXIT_FAILURE);
 }
 return pFile;
}

68 :名無しさん@夢いっぱい:2006/11/13(月) 10:39:04 ID:fma5AE7U
/* 【ファイル名】pNew.h */
#include <stdio.h>
#include <stdlib.h>

typedef struct sBall sBall;
struct sBall {
 char *pBall;
 double dWeight;
 sBall *pNext;
};

69 :名無しさん@夢いっぱい:2006/11/13(月) 10:40:10 ID:fma5AE7U
#include "pNew.h" /* 【ファイル名】pNew.c */
sBall *pNew(char *pBall, double dWeight) {
 sBall *p;

 p = (sBall *)malloc(sizeof(sBall));
 if(p == NULL) {
  fprintf(stderr, "pNew(): p == NULL\n");
  exit(EXIT_FAILURE);
 }

 p->pBall = pBall;/* ボールの数字を示す文字列のアドレスを記憶した */
 p->dWeight = dWeight;
 p->pNext = NULL;/* pAdd()によってpNextを決定する */
 return p;
}

sBall *pAdd(sBall *pMin, sBall *p) {
 p->pNext = pMin;/* ボールを連結した */
 return p;/* pMin = pAdd()とすることによってpMinを更新する */
}

void FreeAll(sBall *pMin) {
 sBall *p;
/* 現在の先頭のボールから順に破棄する */
 while(pMin != NULL) {
  p = pMin->pNext;
  free(pMin);
  pMin = p;
 }
}

70 :名無しさん@夢いっぱい:2006/11/13(月) 10:41:04 ID:fma5AE7U
/* 【ファイル名】pShorten.h */
#include <stdlib.h>

typedef struct sBall sBall;
struct sBall {
 char *pBall;
 double dWeight;
 sBall *pNext;
};

71 :名無しさん@夢いっぱい:2006/11/13(月) 10:42:06 ID:fma5AE7U
/* 【ファイル名】pShorten.c */
#include "pShorten.h"
sBall *pShorten(sBall *pMin, sBall *pOld, sBall *p) {
 if(pOld == NULL) {/* 先頭のボールより前方にはボールが存在しない */
  pMin = p->pNext;/* 直後のボールを先頭のボールにした */
 } else if(p->pNext == NULL) {/* 末尾のボールより後方にはボールが存在しない */
  pOld->pNext = NULL;/* 直前のボールを末尾のボールにした */
 } else {
  pOld->pNext = p->pNext;/* 摘出したボールを迂回した */
 }

 free(p);/* 摘出したボールを破棄した */
 return pMin;
}

72 :名無しさん@夢いっぱい:2006/11/13(月) 10:45:35 ID:fma5AE7U
>>58の設定ファイルでは
重みを均等にしているため旧バージョン>>14-21と同一の出力になる。

73 :名無しさん@夢いっぱい:2006/11/13(月) 10:47:19 ID:fma5AE7U
#【ファイル名】parabola.txt
# y = -20/225 (x - 5)(x - 35)
0x123, 0x234, 0x345, 0x456, 4
Xto6
Log mtNtoR.txt

From 1
Repeat 200000

05 0.000000
06 2.577778
07 4.977778
08 7.200000
09 9.244444
10 11.111111
11 12.800000
12 14.311111
13 15.644444
14 16.800000
15 17.777778
16 18.577778
17 19.200000
18 19.644444
19 19.911111
20 20.000000
21 19.911111
22 19.644444
23 19.200000
24 18.577778
25 17.777778
26 16.800000
27 15.644444
28 14.311111
29 12.800000
30 11.111111
31 9.244444
32 7.200000
33 4.977778
34 2.577778
35 0.000000

74 :名無しさん@夢いっぱい:2006/11/13(月) 10:53:06 ID:fma5AE7U
>>73の設定ファイルで実験した。大幅に重みが相違しており、削除数字もある。
二十万行の結果として、出現数は以下のとおりであった。

06: 8572     21: 58441     
07: 16174     22: 57340     
08: 23038     23: 55904     
09: 29142     24: 54593     
10: 34759     25: 52570     
11: 39590     26: 50402     
12: 43686     27: 46903     
13: 46965     28: 43373     
14: 50168     29: 39278     
15: 52646     30: 34625     
16: 54500     31: 29301     
17: 56045     32: 23012     
18: 57638     33: 16206     
19: 57880     34: 8521     
20: 58728     

75 :名無しさん@夢いっぱい:2006/11/13(月) 11:27:59 ID:fma5AE7U
>>73の設定ファイルの結果をグラフにした http://p.pita.st/?m9gwkzxc

76 :名無しさん@夢いっぱい:2006/11/13(月) 11:38:57 ID:fma5AE7U
【実行例】設定ファイルを指定する
D:\bcc>mtntor parabola.txt > pa200000.txt

D:\bcc>

pa200000.txtは二十万行ある。ログファイル(mtNtoR.txt)は二十万行以上ある。

77 :64:2006/11/13(月) 11:59:54 ID:fma5AE7U
>>64 「反復(注2)」については、>>57のpLine()およびpPick()を参照してください

78 :名無しさん@夢いっぱい:2006/11/16(木) 23:58:46 ID:UAmGVRRn
>>58の設定ファイルで
  From 67356 # 表示を開始する行番号
Repeat 67356 # 反復する回数
に変更すれば
D:\bcc>mtntor mtntor.ini
07 15 30 35 36 40

D:\bcc>

2等だ!

79 :名無しさん@夢いっぱい:2006/12/07(木) 23:44:48 ID:UCU7ZMql
>>58の設定ファイル(mtNtoR.ini)において
  From 40 # 表示を開始する行番号
Repeat 40 # 反復する回数
に変更すれば
D:\bcc>mtntor mtntor.ini
01 05 25 27 39 41

D:\bcc>

3等

80 :75:2006/12/09(土) 00:48:31 ID:VPGk+gDZ
>>73の設定ファイルの結果をグラフにした(再度うpします)
http://www.shinetworks.net/cgi-bin/img-up/src/1165592719795.jpg

43 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.02.02 2014/06/23 Mango Mangüé ★
FOX ★ DSO(Dynamic Shared Object)