C语言经典100例-第三题(想提升C语言代码能力的看过来!)

持续更新!!!

1.刷题链接和地址:

 C 语言教程 | 菜鸟教程

 

 菜鸟教程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

下期博客我们具体看看标准答案是怎么分析的!


看了这么久希望你能学到东西,非常感谢你能不厌其烦看到这里,谢谢大家!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值