用c++写代码 ,要求是贝茜喜欢棋盘游戏和角色扮演游戏,所以她说服了农夫约翰 开车送她去玩物店,在那里她买了三个掷骰子的骰子。这些公平的骰子 有S1 S2 S3边吗 分别(2 <= S1 <= 20;2 <= S2 <= 20;2 <= S3 <= 40)。贝西掷啊掷啊掷,试图找出哪三个骰子的总和出现得最多 经常。给定三个骰子的面数,确定三个骰子的和 出现频率最高。如果出现次数最多的金额不止一个,请报告 最小的总和。输入格式 第1行:三个空格分隔的整数:S1、S2和S3。输出格式 第1行:掷骰子时出现次数最多的最小整数和 在每一个可能的组合中。
时间: 2024-02-06 11:08:52 浏览: 23
以下是代码实现:
```c++
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 45;
int s[3];
int cnt[N];
int main()
{
cin >> s[0] >> s[1] >> s[2];
for (int i = 1; i <= s[0]; i++)
for (int j = 1; j <= s[1]; j++)
for (int k = 1; k <= s[2]; k++)
cnt[i + j + k]++;
int max_cnt = *max_element(cnt, cnt + N);
for (int i = 3; i < N; i++)
if (cnt[i] == max_cnt)
{
cout << i << endl;
break;
}
return 0;
}
```
首先输入三个骰子的面数,然后使用三重循环枚举所有可能的组合,并计算每种组合出现的次数。最后找出出现次数最多的金额,并输出最小的总和。
时间复杂度为 $O(S_1S_2S_3)$。
相关问题
用c++写代码,要求是贝茜喜欢棋盘游戏和角色扮演游戏,所以她说服了农夫约翰 开车送她去玩物店,在那里她买了三个掷骰子的骰子。这些公平的骰子 有S1 S2 S3边吗 分别(2 <= S1 <= 20;2 <= S2 <= 20;2 <= S3 <= 40)。贝西掷啊掷啊掷,试图找出哪三个骰子的总和出现得最多 经常。给定三个骰子的面数,确定三个骰子的和 出现频率最高。如果出现次数最多的金额不止一个,请报告 最小的总和。输入格式 第1行:三个空格分隔的整数:S1、S2和S3。输出格式 第1行:掷骰子时出现次数最多的最小整数和 在每一个可能的组合中。
以下是 C++ 代码实现:
```cpp
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int s1, s2, s3;
cin >> s1 >> s2 >> s3;
vector<int> freq(s1 + s2 + s3 + 1, 0);
for (int i = 1; i <= s1; i++) {
for (int j = 1; j <= s2; j++) {
for (int k = 1; k <= s3; k++) {
freq[i + j + k]++;
}
}
}
int max_freq = 0;
for (int i = 3; i <= s1 + s2 + s3; i++) {
max_freq = max(max_freq, freq[i]);
}
for (int i = 3; i <= s1 + s2 + s3; i++) {
if (freq[i] == max_freq) {
cout << i << endl;
break;
}
}
return 0;
}
```
代码思路:
1. 首先输入三个骰子的面数 s1、s2、s3。
2. 定义一个长度为 s1 + s2 + s3 + 1 的数组 freq,用来记录每个和出现的频率,数组下标表示和的大小。
3. 三重循环遍历所有可能的和,并将其对应的 freq 数组值增加 1。
4. 遍历 freq 数组,找出最大的频率 max_freq。
5. 再次遍历 freq 数组,输出第一个出现频率等于 max_freq 的和。
时间复杂度为 O(s1 * s2 * s3),空间复杂度为 O(s1 + s2 + s3)。
贝茜是一头饥饿的牛。 每天晚上,如果牛棚中还有干草的话,贝茜都会吃掉其中的一捆。 初始时,牛棚中没有干草。 为了让贝茜不被饿死,农夫约翰制定了 N 个给贝茜送干草的计划。 其中第 i 个计划是在第 di 天的白天给贝茜送去 bi 捆干草。 这些计划互不冲突,保证 1≤d1<d2<…<dN≤T。 请你计算,贝茜在第 1∼T 天中有多少天有干草吃。 请用java做出来
以下是用Java编写的解决方案:
```java
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int T = scanner.nextInt(); // 总天数
int N = scanner.nextInt(); // 计划数量
int[] days = new int[N]; // 计划执行的天数
int[] bundles = new int[N]; // 计划送去的干草捆数
for (int i = 0; i < N; i++) {
days[i] = scanner.nextInt();
bundles[i] = scanner.nextInt();
}
int[] hayAvailable = new int[T+1]; // 保存每天可用的干草捆数
for (int i = 0; i < N; i++) {
if (hayAvailable[days[i]] == 0) { // 如果这天还没有干草,则保存计划送去的干草捆数
hayAvailable[days[i]] = bundles[i];
} else { // 如果这天已经有干草,则累加计划送去的干草捆数
hayAvailable[days[i]] += bundles[i];
}
}
int count = 0; // 计数有干草的天数
for (int i = 1; i <= T; i++) {
if (hayAvailable[i] > 0) { // 如果这天有干草可供贝茜吃,则计数加一
count++;
}
}
System.out.println(count);
}
}
```
你可以使用上述代码来计算贝茜在第1~T天中有干草吃的天数。请注意,输入格式应符合以下要求:
- 第一行输入两个整数T和N,分别表示总天数和计划数量。
- 接下来的N行每行输入两个整数di和bi,分别表示给贝茜送去干草的天数和干草捆数。
希望这可以帮助到你!如有任何疑问,请随时提问。