먼저, 스킬저장을 한번도 안할 때임을 밝힌다
확률은 감프스가 밝힌 신화용병 스강 확률을 따랐다
시뮬레이터의 목표치는 제목처럼 지정한 스킬 하나를 S로 만드는 경우이다(스킬1로 설정했다)
신화 강화를 시뮬레이팅하여 목표치에 도달했을 때 강화한 횟수를 저장하고, 이 값을 통해 평균 강화 횟수, 소모 테라, 테라를 가장 적게 쓴 경우와 많이 쓴 경우를 도출한다
시뮬레이팅 도중 지정한 스킬(스킬1)이 아닌 스킬이 S에 도달한 경우를 누적한다(A로 떨어졌다 다시 올라온 경우도 포함한다)
모든 시뮬레이팅은 10만회를 기준으로 하여 진행하고 이를 10회 반복한다
코드는 비쥬얼스튜디오 2022에서 C로 작성하였고 결과 뒤에 첨부한다
결과
100000회 평균 시도 횟수 : 350회
100000회 평균 소모 정테 : 27082개
원치 않은 S가 나온 횟수 : 1750862회
테라를 가장 적게/많이 쓴 경우 : 1200/715200개
100000회 평균 시도 횟수 : 350회
100000회 평균 소모 정테 : 27092개
원치 않은 S가 나온 횟수 : 1745210회
테라를 가장 적게/많이 쓴 경우 : 1000/739800개
100000회 평균 시도 횟수 : 348회
100000회 평균 소모 정테 : 26811개
원치 않은 S가 나온 횟수 : 1735949회
테라를 가장 적게/많이 쓴 경우 : 1000/739800개
100000회 평균 시도 횟수 : 348회
100000회 평균 소모 정테 : 26783개
원치 않은 S가 나온 횟수 : 1744260회
테라를 가장 적게/많이 쓴 경우 : 1000/927800개
100000회 평균 시도 횟수 : 346회
100000회 평균 소모 정테 : 26331개
원치 않은 S가 나온 횟수 : 1738659회
테라를 가장 적게/많이 쓴 경우 : 1200/930000개
100000회 평균 시도 횟수 : 347회
100000회 평균 소모 정테 : 26629개
원치 않은 S가 나온 횟수 : 1749182회
테라를 가장 적게/많이 쓴 경우 : 1200/930000개
100000회 평균 시도 횟수 : 351회
100000회 평균 소모 정테 : 27275개
원치 않은 S가 나온 횟수 : 1747157회
테라를 가장 적게/많이 쓴 경우 : 1000/867400개
100000회 평균 시도 횟수 : 349회
100000회 평균 소모 정테 : 26918개
원치 않은 S가 나온 횟수 : 1749793회
테라를 가장 적게/많이 쓴 경우 : 1200/994600개
100000회 평균 시도 횟수 : 350회
100000회 평균 소모 정테 : 27213개
원치 않은 S가 나온 횟수 : 1759463회
테라를 가장 적게/많이 쓴 경우 : 1000/782800개
100000회 평균 시도 횟수 : 350회
100000회 평균 소모 정테 : 27225개
원치 않은 S가 나온 횟수 : 1757772회
테라를 가장 적게/많이 쓴 경우 : 1000/782800개
추가자료 : 스킬 하나 S 만드는데 저장슬롯을 모두 사용할 때
https://arca.live/b/browndust/55213310?category=%EC%A0%95%EB%B3%B4&p=1
이때, 평균적으로 사용한 정테 개수는 약 23600개였다
원하는 스킬 하나 S 만들 때는 저장 슬롯 쓰나 마나 별 차이가 없다
코드
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
void enhance(int*, int);
int main() {
srand(time(NULL));
int avr = 0, UW = 0, MAX = 0, MIN = 500;
unsigned int PT = 0;
for (int i = 0; i < 100000; i++)
{
int skill[4] = { 0 };
int total = 0, check = 0;
while (1)
{
enhance(skill, rand() % 4);
total++;
if (skill[1] != 5 && skill[2] != 5 & skill[3] != 5) {
check = 0;
}
if (skill[1] == 5 || skill[2] == 5 || skill[3] == 5 && check == 0) {
UW++;
check++;
}
if (skill[0] == 5) {
break;
}
}
avr += total;
PT += total * 200;
if (total < MIN)
MIN = total;
if (total > MAX)
MAX = total;
}
avr /= 100000;
PT /= 100000;
printf("%d회 평균 시도 횟수 : %d회\n", 100000, avr);
printf("%d회 평균 소모 정테 : %u개\n", 100000, PT);
printf("원치 않은 S가 나온 횟수 : %d회\n", UW);
printf("테라를 가장 적게/많이 쓴 경우 : %d/%d개\n", MIN * 200, MAX * 200);
return 0;
}
void enhance(int* p, int n) {
int per = 50 - *(p + n) * 5;
if (rand() % 100 < per)
*(p + n) += 1;
else
*(p + n) -= 1;
if (*(p + n) == 6)
*(p + n) = 5;
if (*(p + n) == -1)
*(p + n) = 0;
return ;
}