먼저, 스킬저장을 한번도 안할 때임을 밝힌다


확률은 감프스가 밝힌 신화용병 스강 확률을 따랐다


시뮬레이터의 목표치는 제목처럼 지정한 스킬 하나를 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 ;

}