C语言编程题(3) -平方数

一、题目

题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?

二、分析

思路:根据题目,可列出方程
x + 100 = n^2
x + 100 + 168 = m^2
两个方程,却有3个未知数,在代数中,它可能是不可解的。但计算机的思维是不需要确切的知道某些值,可以通过无限枚举的方式。把你可能的值都列出来,通过限制条件,就可求出这个值。
由题可知:n^2 - 100 = m ^2 - 268 由此推出—> m ^2 - n ^2 = 168,展开完全平方为
(m + n) * (m - n) = 168,假设 (m + n) = i,(m - n) = j,则 i * j = 168,推出i和j不可能是两个奇数,因为奇数相乘不可能得到168,可能是一个偶数,一个奇数,或者两个都为偶数。
再由, (m + n) = i,(m - n) = j 知,,m = (i + j)/2,n = (i - j)/2,推出i和j一定是大于等于2的偶数,如果有一个为奇数,则 (i + j)/2或 (i - j)/2得不到整数m或n。
因为当i = 2时,j最大是168/2,则可确定 2 =< i * j <= 168/2,则可利用for循环,枚举出i和j的值,即可找出m和n的关系,即可算出x。

三、代码分析

int main(void)
{
	int x,m,n,i,j;
	for (i = 2;i < 168/2;i++)
	{
		if (168 % i == 0)
		{
				j = 168 / i; 
				m = (i + j) / 2;
				n = (i - j) / 2;
				x = (n * n) - 100;
				printf("%d + 100 = %d * %d\n",x,n,n);
				printf("%d + 268 = %d * %d\n",x,m,m);
		}
	}
	return 0;
}

四、总结

这个题目是数学和编程逻辑思维的结合,关键是如何把数学的分析方法变成代码的逻辑。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值