c++数学思维——读书

c++
我被一题给整蒙了,题目内容是这样的:

你的家长最近给你买了一本新书,共n页。你第一天看了a页,以后每天比前一天多看b页,那么最后一天看多少页?
输入描述
输入共一行,包含三个正整数n,a,b
,中间用空格隔开。

输出描述
输出共一行,包含一个正整数,表示最后一天看的页数。

样例
输入 复制
100 25 5
输出 复制
10
提示
【样例说明】

第1天,25页;
第2天,30页;
第3天,35页;
第4天,10页。
【数据范围】

对于50%的数据,0<n≤30,000;
对于100%的数据,0<n≤2,000,000,000。

就是我压根不知道怎么做,用模拟的方法结果只是对了一个,有没有人来推荐一样这用什么方法做

可以看到读书页数为等差数列,那么k天共读(45K+5KK)/2页(数据n可能过大,用long long)
进行循环判断,k逐一递增,当(45K+5K
K)/2大于n时,那么实际递增天数为k-1,计为 f ,此时最后n-(45f+5ff)/2不为0时,得到的数为最后一天看的页数,否则最后一天看的页数为25+5(f-1)

【以下回答由 GPT 生成】

这是一个数学问题,可以使用数学公式来解决。首先,我们可以将这个问题抽象成一个等差数列的求和问题。

根据题目描述,第一天读了a页,之后每天比前一天多读b页,可以总结出每天读的页数如下:

第一天:a页 第二天:a + b页 第三天:a + 2b页 ... 第n天:a + (n-1)b页

我们需要找到一个数学公式来计算n天的总页数。根据等差数列求和公式:

总页数 = (第一天 + 最后一天) * 天数 / 2

在这里,第一天就是a,最后一天就是a + (n-1)b,天数就是n。将这些值代入公式,我们可以得到最终的解决方案。

具体代码如下:

#include <iostream>

int main() {
    int n, a, b;
    std::cin >> n >> a >> b;

    int lastDay = a + (n-1) * b; // 计算最后一天的页数

    std::cout << lastDay << std::endl;
    return 0;
}

这段代码首先通过std::cin从输入中读取n、a和b。然后,使用公式计算出最后一天的页数。最后,通过std::cout输出结果。

这个解决方案的时间复杂度是O(1),非常高效。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^