20150527

#include <stdio.h>
#define QLEN 100
/************************************************************************/  
/* * 正整数序列Q中的每个元素都至少能被正整数a和b中的一个整除,现给定a和b, 
 * 需要计算出Q中的前几项,例如,当a=3,b=5,N=6时,序列为3,5,6,9,10,12 
 * 设计一个函数void generate(int a,int b,int N ,int * Q)计算Q的前几项 
//************************************************************************/  
//1,2,3...从自然数中筛选,效率不高  
//仔细研究即发现其实是从a和b的倍数中删选
////multipleA = 1,为a的倍数, multipleB = 1为b的倍数,  
////选择a*multipleA和b*multiple中小的作为下一个元素,multiple+1, 继续选择  
/************************************************************************/  


/*我的函数*/
void test1(int a, int b)
{
	int n = 0;
	int i = (a < b) ? (a) : (b);
	for(; ;)
	{
		if((0 == i % a) || (0 == i % b))
		{
			printf("%d\n", i);
			n++;
		}

		i++;

		if (n == QLEN)
		{
			break;
		}
	}
}

/*算法函数*/
void test2(int a, int b)
{
	int i = 0;
	int multa = 1;
	int multb = 1;

	for(i = 0; i < QLEN; i++)
	{
		if(multa * a < multb * b)		
		{
			printf("%d\n", a * multa);
			multa++;
		}
		else if(multa * a > multb * b)
		{
			printf("%d\n", b * multb);
			multb++;
		}
		else
		{
			printf("%d\n", b * multb);
			multa++;
			multb++;
		}
	}
}

int main()
{
	test1(3, 5);
	printf("-----------------------------\n");
	test2(3, 5);
}

你可能感兴趣的:(20150527)