【正确答案】
【答案解析】正整数序列Q中的每个元素都至少能被正整数a和b中的一个整除,现给定a和b,如何计算出Q中的前几项?例如,当a=3,b=5,N=6时,序列为3,5,6,9,10,12。
可以与归并排序联系起来,给定两个数组A、B,数组A存放:3×1,3×2,3×3,...数组B存放:5×1,5×2,5×3,...有两个指针i、j,分别指向A、B的第一个元素,取Min(A[i],B[j]),并将较小值的指针前移,然后继续比较。当然,编程实现的时候,完全没有必要申请两个数组,用两个变量就可以了。程序示例如下:
#include<stdio.h>
void Generate(int a,int b,int N,int *Q)
int tmpA,tmpB;
int i=1;
intj=1;
for(int k=0;k<N;k++)
{
tmpA=a*i;
tmpB=b*j;
if(tmpA<=tmpB)
{
Q[k]=tmpA;
i++;
}
else
{
Q[k]=tmpB;
j++;
}
}
}
int main()
{
int a[6];
int i;
Generate(3,5,6,a);
for(i=0;i<sizeof(a)/sizeof(a[0]);i++)
printf("%d",a[i]);
printf("/n");
return 0;
}
程序的输出结果:
3 5 6 9 10 12