当前位置: 首页 > news >正文

Shopee 算法一面手撕

投色子,n次,输出float数组,代表每种和的概率,C++

#include <iostream>

#include <vector>

#include <cmath> // 用于计算pow

#include <iomanip> // 用于格式化输出

using namespace std;

// 计算n次投骰子后,各点数和的概率,返回float数组

vector<float> calculateDiceProbability(int n) {

// 边界条件:n必须大于0

if (n <= 0) {

return {};

}

// 动态规划数组:dp[i][j] 表示i个骰子和为j的组合数

// 为了简化,用二维vector,i从1到n,j从1到6n

vector<vector<long long>> dp(n + 1, vector<long long>(6 * n + 1, 0));

// 初始化:1个骰子的情况

for (int j = 1; j <= 6; ++j) {

dp[1][j] = 1;

}

// 状态转移:计算i个骰子的情况(i从2到n)

for (int i = 2; i <= n; ++i) {

// i个骰子的和范围:[i, 6i]

for (int j = i; j <= 6 * i; ++j) {

// 第i个骰子的点数k:1~6,且j-k >= i-1(i-1个骰子的最小和)

for (int k = 1; k <= 6; ++k) {

if (j - k >= i - 1) { // 确保i-1个骰子的和合法

dp[i][j] += dp[i-1][j - k];

}

}

}

}

// 总组合数:6^n

long long total = pow(6, n);

// 点数和的范围是[n, 6n],共5n+1个值

vector<float> probabilities;

for (int j = n; j <= 6 * n; ++j) {

// 组合数 / 总组合数 = 概率,转换为float

probabilities.push_back(static_cast<float>(dp[n][j]) / total);

}

return probabilities;

}

// 测试函数:输出n次投骰子的各和值及对应概率

void printProbability(int n) {

vector<float> probs = calculateDiceProbability(n);

if (probs.empty()) {

cout << "n必须大于0!" << endl;

return;

}

cout << "投掷" << n << "次骰子,各点数和的概率:" << endl;

int sum = n; // 初始和为n

for (float p : probs) {

cout << "和为" << sum << ":" << fixed << setprecision(6) << p << endl;

sum++;

}

}

int main() {

// 测试用例:投掷2次骰子

int n = 2;

printProbability(n);

// 你可以修改n的值测试,比如n=3

// int n = 3;

// printProbability(n);

return 0;

}

http://www.cnnetsun.cn/news/3627723.html

相关文章:

  • Beyond Compare 5密钥生成器技术深度解析:Python实现的逆向工程实战指南
  • LangChain 错误处理最佳实践:如何让 Agent 在异常时优雅降级而非崩溃
  • PIX4 uORB 内部消息总线详解
  • AMD Ryzen硬件调优工具SMUDebugTool:释放处理器性能潜能的实践指南
  • AssetRipper深度解析:跨平台Unity资源提取工具的完全指南
  • Legacy iOS Kit终极指南:如何为经典iOS设备实现系统降级与越狱
  • 制造业AI模型场景覆盖迭代升级:从单点算法到Agent端到端闭环的实测深度解析
  • 终极指南:OpenCore Legacy Patcher让老Mac重获新生,体验现代macOS的强大功能
  • [AI开发] 安装Codex必须启用WSL2:推荐Win11系统以获得最佳兼容体验
  • Windows热键冲突终极指南:热键侦探完整使用教程
  • 永鼎股份(600105)诊断报告
  • 企业培训考试软件技术选型手册:从架构到集成,实操指南
  • grafana配置redis数据源预警误报问题(database is locked)
  • 10分钟掌握Reloaded-II:跨平台游戏模组管理框架的完整指南
  • 3分钟快速解锁:终极免费QQ音乐解密转换器qmc-decoder使用指南
  • 广东氧舱怎么选?2026微高压氧舱品牌实力榜单
  • AI系统设计中的功能取向方法论与实践
  • 算法入门(七):动态规划 - 基础题目
  • 如何构建高效的本地图片搜索引擎:ImageSearch深度解析
  • AssetRipper终极指南:5步轻松提取Unity游戏资源,新手也能快速上手
  • Efficient Streaming Language Models with Attention Sinks
  • Beyond Compare 5密钥生成技术深度解析:从RSA算法到逆向工程实战
  • 6. 召回:在知识海洋里捞出最相关的片段
  • 高速ADC JESD204B接口配置与调试实战:以TI ADC12DJ2700为例
  • 解决广色域显示器过饱和问题:novideo_srgb色彩校准终极指南 [特殊字符]
  • 深度解析:如何安全构建Switch大气层虚拟系统与插件生态
  • 语音变压器能做到20Hz到20kHz吗?
  • 如何彻底移除Windows Defender:系统管理员终极指南与性能优化工具
  • 如何利用GitHub Actions实现股票分析系统的7x24小时自动化运行
  • 阿里云ECS上搭建生产级Kubernetes集群实战指南