华为上机真题 2022求解连续数列

Posted Linux猿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了华为上机真题 2022求解连续数列相关的知识,希望对你有一定的参考价值。

🎈 作者:Linux猿

🎈 简介:CSDN博客专家🏆,华为云享专家🏆,Linux、C/C++、云计算、物联网、面试、刷题、算法尽管咨询我,关注我,有问题私聊!

🎈 关注专栏: 数据结构和算法成神路【精讲】优质好文持续更新中……🚀🚀🚀

🎈 欢迎小伙伴们点赞👍、收藏⭐、留言💬


目录

一、题目描述

1.1 输入描述

1.2 输出描述

1.3 测试样例

1.3.1 示例 1

1.3.2 示例 2

二、解题思路

三、代码实现

四、时间复杂度


一、题目描述

已知连续正整数数列 K = K1, K2, K3, ..., Ki 的各个数相加之和为 S, i=N (0<S<100000, 0<N<100000), 求此数列 K。

1.1 输入描述

输入包含两个参数:

1)连续正整数数列和 S;

2)数列列数的个数 N。

1.2 输出描述

如果有解,输出数列 K;如果无解,输出 -1。

1.3 测试样例

1.3.1 示例 1

输入

525 6

输出

85 86 87 88 89 90

1.3.2 示例 2

输入

3 5

输出

-1

二、解题思路

本题是一道数学题,用到下面两个公式。

公式一:S = (K1 + Kn) * N / 2

公式二:Kn = K1 + N - 1

两个公式结合后即可求出 K1 和 Kn。

三、代码实现

代码实现如下所示。

#include <iostream>

using namespace std;

int main()

    int S, N;
    while (cin>>S>>N) 
        if ((2 * S) % N) 
            cout<<-1<<endl;
            continue;
        
        int k1 = 2 * S / N - N + 1;
        if (k1 % 2) 
            cout<<-1<<endl;
            continue;
        
        k1 = k1 / 2;
        int kn = k1 + N - 1;
        for (int i = k1; i <= kn; ++i) 
            if (i > k1) cout<<" ";
            cout<<i;
        
        cout<<endl;
    
    return 0;

四、时间复杂度

时间复杂度:O(n)

其中,n 为数列的长度,在上述代码中,只需要通过简单几步的计算即可获得K1 和 Kn,只是最终输出的时候需要遍历 N,所以时间复杂度为O(n)。


🎈 感觉有帮助记得「一键三连支持下哦!有问题可在评论区留言💬,感谢大家的一路支持!🤞猿哥将持续输出「优质文章回馈大家!🤞🌹🌹🌹🌹🌹🌹🤞


以上是关于华为上机真题 2022求解连续数列的主要内容,如果未能解决你的问题,请参考以下文章

华为机试真题 C++ 实现求解连续数列

华为OD机试真题Java实现用连续自然数之和来表达整数真题+解题思路+代码(2022&2023)

华为OD机试真题Java实现数列描述真题+解题思路+代码(2022&2023)

100%通过率华为OD机试真题 C 实现最大连续文件之和 /区块链文件转储系统2022 Q4

华为上机真题连续字母长度

华为OD机试真题Java实现整数分解真题+解题思路+代码(2022&2023)