鱼C论坛

 找回密码
 立即注册
查看: 349|回复: 14

[技术交流] 轻松一练

[复制链接]
回帖奖励 16 鱼币 回复本帖可获得 2 鱼币奖励! 每人限 1 次(中奖概率 20%)
发表于 2024-9-8 21:22:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x

P不知道几      轻松一练

题目背景
简单小题,轻松一练

A国与邪恶的A国(划掉)B国发生了战争,B国投放了秘密武器!
在一次演唱会上,人们在舞台前面的超宽超短长方形广场里围成了一个很大的方阵(容易想到挤满了人),几乎是无限宽的,但长很有限(长定义为舞台到对面的距离)。
B国就在这时投放了武器,其实是一颗球。这颗球从舞台的对面出发,飞快地飞向舞台,并对其右边的所有人发射激光(当然不能穿墙),到达舞台后停止。
当A国警方赶到时,已经有了严重的人员伤亡。

题目描述
A国警方得知,在球距离出发墙壁的距离为x时,球距离右侧墙壁的距离为一个大于0的三次整系数多项式f(x)=ax^3+bx^2+cx+d。警方希望由此得出球的激光扫过的面积,以估算人员伤亡。

输入格式
第一行为五个整数,分别为上文中的a,b,c,d,还有广场的长l。

输出格式
仅一个两位小数,表示面积。

输入输出样例
0 3 2 1 1
3.00

数据范围
a,b,c,d,l <= 100

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-9-8 21:30:25 | 显示全部楼层
为了计算广场上的球发射激光扫过的面积,我们需要求出在给定区间内三次多项式函数的面积,这实际上是一个积分问题。我们可以利用数值积分方法,例如梯形积分法来计算该面积。

根据题意,我们需要对多项式 \( f(x) = ax^3 + bx^2 + cx + d \) 在区间 \([0, l]\) 上进行积分。

步骤:
1. 输入多项式系数和区间长度 \( l \)。
2. 定义多项式函数。
3. 使用数值积分方法(如梯形法)进行积分计算。
4. 输出积分值并格式化为两位小数。

下面是一个Python程序,它实现了上述说明中的方法:
def polynomial(x, a, b, c, d):
    return a * x**3 + b * x**2 + c * x + d

def trapezoidal_integral(f, a, b, n, *args):
    h = (b - a) / n
    total = (f(a, *args) + f(b, *args)) / 2.0
    for i in range(1, n):
        total += f(a + i * h, *args)
    return total * h

# 读取输入
a, b, c, d, l = map(int, input().split())

# 设置积分区间和步数
lower_bound = 0
upper_bound = l
n = 1000  # 分段数

# 计算积分
area = trapezoidal_integral(polynomial, lower_bound, upper_bound, n, a, b, c, d)

# 输出结果,保留两位小数
print(f"{area:.2f}")

### 输入示例
0 3 2 1 1

### 输出示例
3.00

程序解释:
1. `polynomial`函数定义了三次多项式。
2. `trapezoidal_integral`函数使用梯形积分法计算多项式从 \(0\) 到 \(l\) 的积分。
3. 主程序读取输入并调用上述函数计算积分值。
4. 输出结果保留两位小数。

这个程序可以解决题目所要求的计算积分值的问题,并且输出格式准确无误。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-9-8 21:47:38 | 显示全部楼层
FishC 发表于 2024-9-8 21:30
为了计算广场上的球发射激光扫过的面积,我们需要求出在给定区间内三次多项式函数的面积,这实际上是一个积 ...

我们需要C++程序
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-9-8 21:47:51 | 显示全部楼层


好的,下面是一个使用C++实现上述积分计算的程序。我们将使用梯形积分法来计算广场上球发射激光扫过的面积。
#include <iostream>
#include <iomanip>
#include <cmath>

// 定义多项式函数 f(x) = ax^3 + bx^2 + cx + d
double polynomial(double x, int a, int b, int c, int d) {
    return a * std::pow(x, 3) + b * std::pow(x, 2) + c * x + d;
}

// 使用梯形积分法计算区间 [lower, upper] 上的积分
double trapezoidal_integral(double (*f)(double, int, int, int, int), double lower, double upper, int n, int a, int b, int c, int d) {
    double h = (upper - lower) / n;
    double total = (f(lower, a, b, c, d) + f(upper, a, b, c, d)) / 2.0;
    for (int i = 1; i < n; ++i) {
        total += f(lower + i * h, a, b, c, d);
    }
    return total * h;
}

int main() {
    int a, b, c, d, l;
    
    // 读取输入
    std::cin >> a >> b >> c >> d >> l;
    
    // 设置积分区间和步数
    double lower_bound = 0.0;
    double upper_bound = static_cast<double>(l);
    int n = 1000;  // 分段数

    // 计算积分
    double area = trapezoidal_integral(polynomial, lower_bound, upper_bound, n, a, b, c, d);

    // 输出结果,保留两位小数
    std::cout << std::fixed << std::setprecision(2) << area << std::endl;

    return 0;
}

### 解释:
1. **定义多项式函数**:函数 `polynomial` 接收参数 \( x \),以及多项式的系数 \( a, b, c, d \),返回三次多项式的值。
2. **梯形积分法**:函数 `trapezoidal_integral` 使用梯形积分法计算区间 \([lower, upper]\) 上的积分。它接收多项式函数指针 \( f \),区间左右边界 \( lower \) 和 \( upper \),分段数 \( n \),以及多项式系数。
3. **输入输出**:主函数 `main` 读取输入的多项式系数和区间长度 \( l \),调用积分函数计算积分值,并将结果格式化为两位小数后输出。

### 输入输出示例:
对于输入 `0 3 2 1 1`

程序会输出:`3.00`

这个C++程序满足题目要求,并且能准确计算和输出积分值,适合作为解答提交。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-9-9 09:59:35 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-9-9 10:31:09 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-9-9 16:50:34 | 显示全部楼层
math板块里面有没有直接用来算积分的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-9-10 17:21:30 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-9-11 09:42:03 | 显示全部楼层

回帖奖励 +2 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-9-14 17:32:07 | 显示全部楼层
终于找到了!回帖奖励!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-9-14 17:34:07 | 显示全部楼层
回帖奖励
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-9-14 17:37:49 | 显示全部楼层
0.64的概率被我碰上了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-9-14 17:39:19 | 显示全部楼层
0.48的概率被我碰上了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-9-14 17:39:35 | 显示全部楼层
0.4的概率被我碰上了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-9-14 17:40:14 | 显示全部楼层

回帖奖励 +2 鱼币

呜呜呜,为什么0.32了还不爆鱼币
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-4 01:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表