谷歌:正整数序列Q中的每个元素都至少能被正整数a和b中的一个整除,现给定a和b,需要计算出Q中的前几项


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

(1)、设计一个函数void generate(int a,int b,int N ,int * Q)计算Q的前几项

(2)、设计测试数据来验证函数程序在各种输入下的正确性。

ps:由于笔者水平有限,如有错误,或者有更好的解决办法,还望各位道友批评指正。

        转载请注明出处,并请勿用于商业用途。

#include<stdio.h>

void generate(int a,int b,int N ,int * Q)
{
	//错误处理
	if((a<=0 && b<=0 ) || Q==NULL || N<=0)
		return ;

	int a_i=0;
	int b_i=0;
	int Q_i=0;
	bool a_iszero=false;
	bool b_iszero=false;
	
	if(a==0)
		a_iszero=true;
	if(b==0) 
		b_iszero=true;

	//a,b 都非零的情况,做为第一个判断条件是因为两个数都是正整数的概率比较大
	if(!a_iszero && !b_iszero)
	{
		while ((a_i+b_i)<N)
		{
			if(a_i*a+a < b+b*b_i)
			{
				*(Q+Q_i)=a+a*a_i;
				printf("%d ",*(Q+Q_i));
				Q_i++;
				a_i++;
				
			}
			else if(a_i*a+a > b+b*b_i )
			{
				*(Q+Q_i)=b+b*b_i;
				 printf("%d ",*(Q+Q_i));
				Q_i++;
				b_i++;
			
			}
			else
			{
				//相等的情况处理,如果不处理,会有重复输出
				a_i++;//b_i++也可以
				N++;
			}
		}
		
	}
	//a!=0 , b==0 的情况
	else if( !a_iszero)
	{
		while(a_i<N)
		{
		    *(Q+Q_i)=a+a*a_i;
			printf("%d ",*(Q+Q_i));
		    Q_i++;
			a_i++;
		}
	}
	//a==0,b!=0 的情况
	else
	{
		while(b_i<N)
		{
			*(Q+Q_i)=b+b*b_i;
			 printf("%d ",*(Q+Q_i));
		    Q_i++;
			b_i++; 
		}
	}

	printf("\n");
}

int main()
{
	int Q[12];
	// abN为非正整数以及Q==NULL的数据不进行测试,
	//因为在函数中的第一句已经已经判断了。
	generate( 4,5,5,Q);
	generate( 2,4,6,Q);
	generate( 2,0,7,Q);
	generate( 0,2,8,Q);
	generate( 2,103,9,Q);
	getchar();
	return 0;
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值