ysnb
2026-10-07 13:35:59
发布于:上海
#include <bits/stdc++.h>
using namespace std;
// 模拟一次抽卡:返回 true 表示出了五星
bool isFiveStar(int pity) {
// 前73抽:0.6%
if (pity <= 73) {
return (rand() % 10000) < 60; // 0.6% = 60/10000
}
// 74-89抽:概率递增 6%
if (pity <= 89) {
double prob = 0.6 + (pity - 73) * 6.0;
return (rand() % 10000) < (int)(prob * 100);
}
// 第90抽:100%
return true;
}
// 模拟抽到N个限定金所需抽数
int simulate(int targetCount) {
int totalPulls = 0;
int fiveStarCount = 0;
int pity = 0; // 距离上次出金的抽数
bool isGuaranteed = false; // 大保底状态
int mingguangCounter = 1; // 捕获明光计数器,初始为1
while (fiveStarCount < targetCount) {
totalPulls++;
pity++;
if (isFiveStar(pity)) {
pity = 0; // 出金后重置
// 判断是否出UP
bool isUP = false;
if (isGuaranteed) {
// 大保底,必定UP
isUP = true;
isGuaranteed = false;
mingguangCounter = max(0, mingguangCounter - 1);
} else {
// 小保底,判断是否触发捕获明光
// 计数器为3时必定触发明光;否则按55%综合概率
if (mingguangCounter >= 3) {
isUP = true;
mingguangCounter = 1; // 触发后重置为1
} else {
// 综合UP概率55%(含明光基础概率)
isUP = (rand() % 100) < 55;
if (isUP) {
mingguangCounter = max(0, mingguangCounter - 1);
} else {
isGuaranteed = true; // 歪了,下次大保底
mingguangCounter = min(3, mingguangCounter + 1);
}
}
}
if (isUP) {
fiveStarCount++;
}
}
}
return totalPulls;
}
int main() {
srand(time(0));
int N = 100000; // 模拟次数
int total = 0;
for (int i = 0; i < N; i++) {
total += simulate(2); // 抽2个限定金
}
cout << "平均抽数: " << (double)total / N << endl;
return 0;
}
#include <bits/stdc++.h>
using namespace std;
// 模拟一次抽卡:返回 true 表示出了五星
bool isFiveStar(int pity) {
if (pity <= 73) {
return (rand() % 10000) < 60; // 0.6%
}
if (pity <= 89) {
double prob = 0.6 + (pity - 73) * 6.0;
return (rand() % 10000) < (int)(prob * 100);
}
return true; // 第90抽必出
}
// 模拟一次抽卡过程:在 maxPulls 抽内,能否拿到 targetCount 个限定金
bool simulate(int maxPulls, int targetCount) {
int totalPulls = 0;
int fiveStarCount = 0;
int pity = 0;
bool isGuaranteed = false;
int mingguangCounter = 1; // 捕获明光计数器
while (totalPulls < maxPulls && fiveStarCount < targetCount) {
totalPulls++;
pity++;
if (isFiveStar(pity)) {
pity = 0;
bool isUP = false;
if (isGuaranteed) {
isUP = true;
isGuaranteed = false;
mingguangCounter = max(0, mingguangCounter - 1);
} else {
if (mingguangCounter >= 3) {
isUP = true;
mingguangCounter = 1;
} else {
isUP = (rand() % 100) < 55;
if (isUP) {
mingguangCounter = max(0, mingguangCounter - 1);
} else {
isGuaranteed = true;
mingguangCounter = min(3, mingguangCounter + 1);
}
}
}
if (isUP) {
fiveStarCount++;
}
}
}
return fiveStarCount >= targetCount;
}
int main() {
srand(time(0));
int maxPulls, targetCount, N;
cout << "请输入抽数: ";
cin >> maxPulls;
cout << "请输入想要拿到的限定金数量: ";
cin >> targetCount;
cout << "请输入模拟次数 (建议100000): ";
cin >> N;
int success = 0;
for (int i = 0; i < N; i++) {
if (simulate(maxPulls, targetCount)) {
success++;
}
}
double rate = (double)success / N * 100.0;
cout << fixed << setprecision(2);
cout << "在 " << maxPulls << " 抽内拿到 " << targetCount << " 个限定金的成功率: " << rate << "%" << endl;
return 0;
}
全部评论 2
上课发帖子
1小时前 来自 上海
1☁⚪🐍
1小时前 来自 广东
0




























有帮助,赞一个