持续更新!!!
1.刷题链接和地址:
菜鸟教程C语言专栏这里的"C经典100例"(看红色框框)
2.第三题解题
2.1读题:
他这里说有个整数,加上100是个完全平方数,也就是说x+100 = n^2(x是这个整数,n是完全平方数),然后x加上100后再加168他又是另一个完全平方数,也就是x+100+168 = m^2;
2.2解题:
我一开始写的代码:
/*
一个正数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
*/
#include <stdio.h>
#include <math.h>
int main()
{
for(int x =0;x<10000;x++)
{
for(int n = 0;n<10000;n++)
{
if(x+100 == n*n)
{
for(int m = 0;m<10000;m++)
{
if(x + 268 ==m * m) printf("%d ",x);
}
}
}
}
return 0;
}
这个代码意思就是说首先for循环,让x等于0-10000每个数字都进去一次(当然这里有局限性,就是如果x是10000后面的数字才满足条件呢?),然后n再等于0到100000,这里为什么n是等于0-10000呢?因为n*n才等于x+100,所以n按道理不会超过x的值(当然这肯定不是最精确的,有兴趣可以自己去试试),所以我for循环中x最大的值只可能是10000,所以n自然也不可能越界了;如果前面我这些话你能够理解,那这个代码你差不多就懂了
这是我这个代码的输出结果:
当然这篇不重点讲for的嵌套循环,如果你没懂for的嵌套循环的话,建议看看我前面的第一篇,或者后面碰到嵌套题目再分享
2.3缺点:
前面也提到过一些,万一这个数x超过10000呢?这种情况我这个程序就不包含了
上面这个图是标准答案,也正如我所想,少了一个-99这个数字
2.3改进:
/*
一个正数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
*/
#include <stdio.h>
#include <math.h>
int main()
{
for(int x =-100;x<10000;x++)
{
for(int n = 0;n<10000;n++)
{
if(x+100 == n*n)
{
for(int m = 0;m<10000;m++)
{
if(x + 268 ==m * m) printf("%d ",x);
}
}
}
}
return 0;
}
这个代码的运行结果就有-99了,和上面我写的代码唯一区别就是x初始条件变成-100了,为什么可以这样变呢?
看这个图,我们得到的已知信息,可以看出x+100肯定是个大于等于0的数字,因为n^2必须非负,所以x肯定是最小只能是-100(而且x是整数),后面那个x+268的可以推出x最小是-268,但是-268就不满足前面了x+100非负了,因此我程序把x最小设置成-100
这是输出结果,果然包含了全部值,但是仍有个缺陷就是无法判断上限是多少,(虽然这题上限刚好不超过10000,属于瞎猫碰死耗子了),可以判断下限是-100
下期博客我们具体看看标准答案是怎么分析的!
看了这么久希望你能学到东西,非常感谢你能不厌其烦看到这里,谢谢大家!