鱼C论坛

 找回密码
 立即注册
查看: 2392|回复: 7

[已解决]经典完全平方根问题 思路求助

[复制链接]
发表于 2018-4-5 21:43:12 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include <stdio.h>

/*思路一:完全平方根的简单个人认为 如1*1,2*2,3*3....简单认为自身*自身的数,末位数0,1,4,,5,6,9*/
/*思路二:math.h这个上面有函数可直接开方*/
/*经典原题:  一个10W以内的数加上100可以开方,这个数+268还能开方,这个数是多少    */
/*思路二已经实现  思路一有BUG */

void main()
{
        int a,i,l;
        i = 100000;/*i等于十万 i自减*/
        while(i>0)
        {
                a = i*i+100; /*i+100开方*/
                while(i>0) /*a已经等于i*i+100,那么循环十万以内的 */
                {
                        if(a = i*i);/*如果10W以内有 加过100(a)后还能 i*i相等*/
                        {
                                printf("%d",a);
                                a = i+268;        /*i+268开方*/
                                break;
                                l = 100000;/*每次都循环10以内的数字*/
                                while(l>0)
                                {
                                        if(a = i*i)/*如果10W以内 还能被加268那个数相等 就输出*/
                                        {
                                                printf("%d",a);
                                                break;
                                        }
                                        i--;
                                }
                        }
                        i--;
                }
                i--;
        }
}
最佳答案
2018-4-5 22:07:10
其实就是一个简单的枚举问题。。
鉴于看到你的代码略微麻烦。。
我自己擅做主张给你写了一个。。

#include <stdio.h>
#include <math.h>

typedef long long LL;

int main()
{
    LL x,y,i;
    for( i = 0; i < 100010; i++ ){
        x = sqrt(i + 100);
        y = sqrt(i + 268);

        if( (x * x == i + 100) && (y * y == i + 268 ) )
            printf("i == %lld\n",i);
    }
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-4-5 21:43:59 | 显示全部楼层
死循环 break只是调试时候做的跳出添加的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-5 21:51:42 From FishC Mobile | 显示全部楼层
你先把if中的=换成==再说
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-5 22:07:10 | 显示全部楼层    本楼为最佳答案   
其实就是一个简单的枚举问题。。
鉴于看到你的代码略微麻烦。。
我自己擅做主张给你写了一个。。

#include <stdio.h>
#include <math.h>

typedef long long LL;

int main()
{
    LL x,y,i;
    for( i = 0; i < 100010; i++ ){
        x = sqrt(i + 100);
        y = sqrt(i + 268);

        if( (x * x == i + 100) && (y * y == i + 268 ) )
            printf("i == %lld\n",i);
    }
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-6 08:49:28 | 显示全部楼层
BngThea 发表于 2018-4-5 21:51
你先把if中的=换成==再说

谢谢- - 我是手打上去的 改了还死循环
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-6 08:50:36 | 显示全部楼层
Rocky0429 发表于 2018-4-5 22:07
其实就是一个简单的枚举问题。。
鉴于看到你的代码略微麻烦。。
我自己擅做主张给你写了一个。。

谢谢 你代码写的漂亮  用math.h中sqrt循环我也做出了 可是思路一行不通- -
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-6 11:28:40 From FishC Mobile | 显示全部楼层
理想小青年 发表于 2018-4-6 08:49
谢谢- - 我是手打上去的 改了还死循环

第一个i--应该是大写的I吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-7 09:50:33 | 显示全部楼层
代码可能手打上去了 有些问题 但是大佬们 思路对不对呢 对于这个数学公式来说 这种思路对不对 是不是这样嵌套循环呢
思路为主 代码为辅
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-1 19:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表