게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
혹시 프로그래밍 조금 아시는분~ (승률에 따른 5급까지 필요한 판수)
게시물ID : hstone_30930짧은주소 복사하기
작성자 : pprn
추천 : 0
조회수 : 432회
댓글수 : 5개
등록시간 : 2015/11/28 05:25:53
http://inven.co.kr/board/powerbbs.php?come_idx=3559&l=5647

이 글보고 새벽에 잠도 안오고 해서 저도 승률 계산 프로그램을 짜 봤는데요, (5급 -> 전설 은 안했음)

결과값이 저 글과 약간 다르게 나와서 혹시 가정이나 계산에 틀린곳이 있나 좀 봐주셨으면 합니다.




가정 1. 연승해서 올라왔다면 20급 2성일 수 있지만 그렇지 않다고 가정함 (20급 1성으로 시작)
가정 2. 무승부는 없음
가정 3. 어느 구간에서나 승률은 동일하다. (20급에서 매칭되는 사람들보다 5급에서 매칭되는 사람들이 더 잘할 것이지만, 항상 같다고 가정)

초기 상태 = 20급 1성

20급~16급 -> 별3개 -> 15개
15급~11급 -> 별4개 -> 20개
10급~6급  -> 별5개 -> 25개

6급 5성에서 연승인 상태로 이겼다면, 5급 2성이 됨
6급 5성에서 연승이 아닌 상태로 이겼다면, 5급 1성이 됨


20급 1성부터 5급 1성까지 총 필요 별 갯수 = 60개



이긴다면, 
승수 +1, 연승카운트 +1, 별 +1
연승카운트가 3이상이라면, 추가 별 +1

진다면
패수 +1, 연승카운트 0으로 초기화, 별 -1

별 갯수가 60을 넘어가는 순간 종료



10만회 시행. 결과값

승률 평균 승 평균 패 게임 수
46 1543.13 1808.27 3351.4
47 649.71 731.40 1381.12
48 414.28 447.84 862.12
49 306.95 318.71 625.66
50  245.86 245.31 491.17
51  205.79 197.26 403.05
52 177.60 163.55 341.15
53 156.91 138.87 295.78
54 140.68 119.58 260.26
55 127.73 104.21 231.95
56 117.56 92.21 209.77
57 108.77 81.86 190.63
58 101.37 73.22 174.60
59 94.98 65.79 160.77
60 89.67 59.64 149.31


승률이 45% 일땐, 시행 횟수를 1로 해도 46% 10만회보다 계산 시간이 오래 걸려서... 패스했습니다.

인벤에 올라온 결과값과 어느 정도 비슷한 값을 갖지만, 분명히 오차가 존재하기에.. 제가 틀린 부분이 있는지 봐주시면 감사하겠습니다.







아래는 소스 코드 입니다


#include <iostream>
#include <time.h>

using namespace std;

#define MAX_STAR 60
#define WINNING_RATE 50
#define HOW_MANY 100000

int main()
{
//20급1성 -> 5급1성
//20급~16급 -> 별3개 -> 15개
//15급~11급 -> 별4개 -> 20개
//10급~1급  -> 별5개 -> 25개 (5급 1성까지)

//총 60개 필요

srand(unsigned(time(NULL)));

//보유 별 갯수
int star = 0;

//승,패 카운트
int win = 0, lose =0;

//연승 카운트
int ys = 0;

//누적 승/패 카운트
float acc_win = 0, acc_lose = 0;

for(int i=0; i<HOW_MANY; ++i)
{
//별이 60이 되는 순간 반복 종료
while(star <= MAX_STAR)
{
//0~99 난수 생성
int temp = rand() % 100;
//이기는 경우
//만약 WINNING_RATE가 80 이고, 난수가 0~79라면 승리 
if(temp < WINNING_RATE)
{
win++;
ys++;

star++;

//3연승부터 추가 별
if(ys >= 3)
{
star++;
}
}

//지는 경우
else
{
lose++;
ys = 0;

star--;
}
}

acc_win += win;
acc_lose += lose;

star = 0; win = 0; lose = 0; ys = 0;
}

cout<<"승률이 "<<WINNING_RATE<<"%일 때"<<endl;
cout<<"평균 승 : "<<acc_win / HOW_MANY<<endl;
cout<<"평균 패 : "<<acc_lose / HOW_MANY<<endl;
cout<<"평균 게임 횟수 : "<<(acc_win + acc_lose) / HOW_MANY<<endl;


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