正整数序列Q中的每个元素都至少能被正整数a和b中的一个整除,现给定a和b,如何生成Q中的前几项
思路分析:可以与归并排序联系起来,给定两个变量A、B,变量A轮着存放:a*1,a*2,a*3,……变量组B轮着存放:b*1,b*2,b*3,……有两个整数i、j,分别代表A、B第i、j次存放的值,每次取A、B中的较小值,并将较小值的次数加一,然后继续比较。
代码如下:
#include "stdafx.h" #include<stdio.h> void Generate(int a, int b, int N, int *Q) { int tmpA, tmpB; int i = 1; int j = 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"); getchar(); return 0; }
效果如图: