码蹄集 - MT2165 - 小码哥的抽卡之旅1

@TOC


小码哥的抽卡之旅1

时间限制:1秒
空间限制:128M


题目描述

小码哥最近迷上了一款抽卡游戏。单抽出金的概率是0.6%,如果前89发都不出金,则90发必出金。小天目前存了一些抽数,想要你帮他算算他出金的概率。


输入描述

一个整数n,表示小码哥的抽数

数据范围

1<=n<=90


输出描述

一个百分数p,表示出金的概率,保留六位小数(按所给样例)


样例一

输入

1
1

输出

1
0.600000%

题目分析

好像和原神的抽卡一模一样

  • 抽$0$次中奖的概率是$0$,不中奖的概率是$1$

  • 抽$1$次中奖的概率是$1\times 0.006 = 0.006$,不中的概率是$1 - 0.006 = 0.994$

  • $2$次抽奖机会能中奖的概率是$0.006 + 0.994\times 0.006 = 0.011964$

  • $\cdots$

注意,我描述$2$次抽奖的时候,说的不是抽2次中奖的概率

两次抽奖机会不等于抽2次中奖

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33

```抽2次中奖```是指前$1$次没中奖,第$2$次中奖了


# AC代码

其实做题的时候我忘特判$90$发必中了,$90$次机会能中奖的概率是$41.819882\%$,但是AC了。**AC代码不等于正确代码**

```cpp
/*
* @Author: LetMeFly
* @Date: 2022-08-03 18:30:18
* @LastEditors: LetMeFly
* @LastEditTime: 2022-08-03 18:33:03
*/
#include <bits/stdc++.h>
using namespace std;
#define mem(a) memset(a, 0, sizeof(a))
#define dbg(x) cout << #x << " = " << x << endl
#define fi(i, l, r) for (int i = l; i < r; i++)
#define cd(a) scanf("%d", &a)
typedef long long ll;
int main() {
int n;
double get = 0, notget = 1 - get;
cin >> n;
for (int i = 0; i < n; i++) {
get += notget * 0.006;
notget = 1 - get;
}
printf("%.6lf%\n", get * 100);
return 0;
}

正确代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/*
* @Author: LetMeFly
* @Date: 2022-08-04 09:43:00
* @LastEditors: LetMeFly
* @LastEditTime: 2022-08-04 09:43:02
*/
#include <bits/stdc++.h>
using namespace std;
#define mem(a) memset(a, 0, sizeof(a))
#define dbg(x) cout << #x << " = " << x << endl
#define fi(i, l, r) for (int i = l; i < r; i++)
#define cd(a) scanf("%d", &a)
typedef long long ll;
int main() {
int n;
double get = 0, notget = 1 - get;
cin >> n;
for (int i = 0; i < n; i++) {
get += notget * 0.006;
notget = 1 - get;
}
printf("%.6lf%\n", n == 90 ? double(1) : get * 100);
return 0;
}

方法二

其实也可以不用这么麻烦,直接枚举每一次不中奖的概率,代码更简短

$n$次都不中的概率是$(1-0.006)^n$,因此答案为$1 - (1 - 0.006) ^ n$

1
2
3
int n;
cin >> n;
printf("%.6lf%\n", n == 90 ? double(1) : 1 - pow(1 - 0.006, n));

虽然代码可以复制,但最好还是自己理解后再敲哦

原创不易,转载请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/126153308


码蹄集 - MT2165 - 小码哥的抽卡之旅1
https://blog.letmefly.xyz/2022/08/04/MaTiJi - MT2165 - 小码哥的抽卡之旅1/
作者
Tisfy
发布于
2022年8月4日
许可协议