게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
c언어 난수 생성 질문
게시물ID : programmer_14116짧은주소 복사하기
작성자 : Utopia
추천 : 0
조회수 : 1133회
댓글수 : 16개
등록시간 : 2015/10/27 14:33:52


#include <stdio.h>
#include<stdlib.h>
#include<time.h>
#include<windows.h>
int running(int var1)
{
if (var1 == 0) //20%확률(이김) 일때 1리턴
return 1;
else
return 0; //80%확률(짐) 일때 0리턴
}
int win(int money, int var2)
{
if (var2 == 0) //1등 3배
return money * 3;
else if (var2 == 1) //2등 2배
return money * 2;
}
int lose(int money)
{
return money;
}
int game(int var1, int var2, int* money, int betting)
{
int res;
//srand((unsigned)time(NULL));
res = running(var1);
if (res == 1)
{
if (var2 == 0)
{
*money = *money + win(betting, var2);
printf("money : %10d \t betting: %10d Win*3\n", *money, betting);
return 0;
}
if (var2 == 1)
{
*money = *money + win(betting, var2);
printf("money : %10d \t betting: %10d Win*2\n", *money, betting);
return 0;
}
//*money = *money + win(betting, var2);
//printf("money : %10d \t betting: %10d Win\n", *money, betting);
//return 0;
}
else if (res == 0)
{
*money = *money - lose(betting);
printf("money : %10d \t betting: %10d Lose\n", *money, betting);
return 1;
}
// return money;
}
int main(void)
{
int i = 0, var1, var2, end;
static int cnt = 0;
static int cnt2 = 0;
int money = 10000000000; int betting = 10000;
srand((unsigned)time(NULL));
//_sleep(100);
var1 = rand() % 5;
var2 = rand() % 2;
////for (i = 0; i < 20; i++)
////{
//// var1 = rand() % 5;
//// var2 = rand() % 2;
//// printf("%d %d\n", var1, var2);
////}rand값확인 유효값확인완료
//
////money=game(var1, var2, &money, betting);
////printf("money : %4d\n", money);
//for (i = 0; i < 20; i++)
//{
// var1 = rand() % 5;
// var2 = rand() % 2;
// game(var1, var2, &money, betting);
// printf("money : %4d\n", money);
//}
////1회게임완료
while (1)
{
srand((unsigned)time(NULL));
//_sleep(100);
var1 = rand()% 5;
var2 = rand()% 2;
betting = 10000;
end = game(var1, var2, &money, betting); cnt++;
if (end == 1) //패했을시
{
while (1) //이길때까지 반복
{
srand((unsigned)time(NULL));
//_sleep(1000);
betting *= 2;
var1 = rand() % 5;
var2 = rand() % 2;
end = game(var1, var2, &money, betting); cnt++; cnt2++;
if (end == 0)
break;
if (money < 0)
{
printf("bankrupt!!!\n");
printf("count : %d, continuous cnt : %d\n", cnt, cnt2 + 1);
return 0;
}
//_sleep(7);
}
}
if (money < 0)
{
printf("bankrupt!!!\n");
printf("count : %d, continuous cnt : %d\n", cnt, cnt2 + 1);
return 0;
}
printf("count : %d, continuous cnt : %d\n", cnt, cnt2 + 1);
cnt2 = 0;
}
return 0;
}




18연패할 확률이 0.0180144%(10만분의18) 인데 실제로 돌려보면 1000번도 못가서 파산합니다..

시드값을 time으로줘서 1초도 안되는 시간에 같은값을 같는거 같은데 time(NULL)말고 다른 값을 시드로 주는 방법이 있을까해서 여쭈어봅니다.

전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호