如何计算出序列的前n项数据

来源:互联网 发布:定位兔软件下载 编辑:程序博客网 时间:2024/04/29 02:42

题目:正整数序列 Q 中的每个元素都至少能被正整数 a 和 b 中的一个整除,现给定 a 和 b,如何计算出 Q 中的前几项?例如,当 a=3,b=5,N=6时,序列为3,5,6,9,10,12。

思路分析:可以和归并排序联系起来,给定两个数组 A、B,数组 A 存放:3 x 1,3 x 2,3 x 3,… 数组 B 存放 5 x 1,5 x 2,5 x 3,… 有两个指针 i、j,分别指向 A、B 的第一个元素,取 Min(A[ i ], B[ j ]),并将较小值的指针前移,然后继续比较(即归并排序中的“合并两个有序序列“)。当然,实现时没有必要申请两个数组,用两个变量即可。具体实现如下:

#include <iostream>void CreateArr(int a, int b, int len, int arr[]){    int tempA,tempB;    int i = 1;    int j = 1;    for (int k = 0; k < len; k++)    {        tempA = a * i;        tempB = b * j;        if (tempA <= tempB)        {            arr[k] = tempA;            i++;        }        else        {            arr[k] = tempB;            j++;        }    }}int main(int argc, const char * argv[]) {    int arr[6];    CreateArr(3, 5, 6, arr);    for (int i = 0; i < 6; i++)        printf("%d  ", arr[i]);    printf("\n");    return 0;}
0 0