鱼C论坛

 找回密码
 立即注册
查看: 2417|回复: 11

c语言小新求助

[复制链接]
发表于 2019-11-10 23:27:09 | 显示全部楼层 |阅读模式

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

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

x
想求一个只用循环结构和条件语句的结构,要求是:求个数x,x加100是一个完全平方数,再加168还是一个完全平方数,输出这个数。实在想不出来了,求助谢谢。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-11-11 00:09:50 | 显示全部楼层
本帖最后由 jackz007 于 2019-11-11 00:14 编辑

        真是没有想到啊,楼主,上个帖子不就是求助这个问题吗,连 "最佳答案" 都给了别人,怎么还在求助啊?
#include <stdio.h>
#include <math.h>

main(void)
{
        int d , e , k                                                                 ;
        for(k = 0 ;; k ++) {
                d = (int) sqrt(k + 100)                                               ;
                e = (int) sqrt(k + 168)                                               ;
                if(d * d == k + 100 && e * e == k + 168) {
                        printf("the number that corespounding the demond : %d\n" , k) ;
                        break                                                         ;
                }
        }
        return 0                                                                      ;
}
        编译、运行实况:
C:\Bin>g++ -o x x.c

C:\Bin>x
the number that corespounding the demond : 156

C:\Bin>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-11 12:40:18 From FishC Mobile | 显示全部楼层

sqert
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-11 19:09:54 | 显示全部楼层
本帖最后由 倒戈卸甲 于 2019-11-11 19:17 编辑

其实楼主可以自己多想想,能想出整数是奇数与偶数的合集,楼主具备一定的数学能力的。我也提出了改进算法:完全平方数必然是某个比它小的整数的完全平方。完全只使用你用过的语法(甚至不用for语句),代码如下:
#include <stdio.h>

void main()
{
        int x, a, b,tidai1, tidai2;
        
        x=a=b=tidai1 = tidai2 = 0;
        while (tidai1+tidai2!=2)
        {
                a=b=tidai1 = tidai2 = 0;
                while (a < x + 100)
                {
                        if (a*a == x + 100)
                        {
                                tidai1 = 1;
                        }
                        a++;
                }
                while (b < x + 168)
                {
                        if (b*b == x + 168)
                        {
                                tidai2 = 1;
                        }
                        b++;
                }
                x++;
        }

        printf("%d\n", x-1);
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-13 12:34:44 | 显示全部楼层
jackz007 发表于 2019-11-11 00:09
真是没有想到啊,楼主,上个帖子不就是求助这个问题吗,连 "最佳答案" 都给了别人,怎么还在求助啊 ...

想问一个问题,两个分号之间的条件是k任意取吗?
        for(k = 0 ;; k ++)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-13 13:16:10 | 显示全部楼层
liuyanxiong 发表于 2019-11-13 12:34
想问一个问题,两个分号之间的条件是k任意取吗?
        for(k = 0 ;; k ++)

      是放弃判断的意思,你没看到循环体里有 break 语句吗,这么循环的逻辑就是,循环,直到找到这个数为止。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-13 20:08:05 | 显示全部楼层
jackz007 发表于 2019-11-13 13:16
是放弃判断的意思,你没看到循环体里有 break 语句吗,这么循环的逻辑就是,循环,直到找到这个数 ...

如果找到了符合条件的数,那之后的数是不是就没法判断了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-13 20:11:48 | 显示全部楼层
liuyanxiong 发表于 2019-11-13 20:08
如果找到了符合条件的数,那之后的数是不是就没法判断了

     难道你还想找出多个?我试过,只能找到 1 个,不信的话,你把 break 去掉,在 for 语句中,补上 k 的循环上限自己试试看。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-13 20:20:50 | 显示全部楼层
jackz007 发表于 2019-11-13 20:11
难道你还想找出多个?我试过,只能找到 1 个,不信的话,你把 break 去掉,在 for 语句中,补上 k  ...

确实没有,再问一个,你那个break应该可有可无吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-13 20:25:51 | 显示全部楼层
liuyanxiong 发表于 2019-11-13 20:20
确实没有,再问一个,你那个break应该可有可无吧

      如果没有真的可以吗?
      真的可以吗?
      真的可以吗?
      
      真的不可以!!!
      如果没有 break 就是死循环!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-14 12:43:17 | 显示全部楼层
jackz007 发表于 2019-11-13 20:25
如果没有真的可以吗?
      真的可以吗?
      真的可以吗?

可是我得出答案了
#include <stdio.h>
#include <math.h>

void main()
{
        int d , e , k                                                                 ;
        for(k = 0 ;; k ++) {
                d = (int) sqrt(k + 100)                                               ;
                e = (int) sqrt(k + 168)                                               ;
                if(d * d == k + 100 && e * e == k + 168) {
                        printf("the number that corespounding the demond : %d\n" , k) ;                                                                        
                }
        }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-14 13:01:51 | 显示全部楼层
liuyanxiong 发表于 2019-11-14 12:43
可是我得出答案了
#include
#include

      是得出答案了,可是,你的程序呢,是不是就死了?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-4 21:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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