题目:正整数序列 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;
}