鱼C论坛

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

c语言小新求助

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

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

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

x
想求一个只用循环结构和条件语句的结构,要求是:求个数x,x加100是一个完全平方数,再加168还是一个完全平方数,输出这个数。实在想不出来了,求助谢谢。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

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

  3. main(void)
  4. {
  5.         int d , e , k                                                                 ;
  6.         for(k = 0 ;; k ++) {
  7.                 d = (int) sqrt(k + 100)                                               ;
  8.                 e = (int) sqrt(k + 168)                                               ;
  9.                 if(d * d == k + 100 && e * e == k + 168) {
  10.                         printf("the number that corespounding the demond : %d\n" , k) ;
  11.                         break                                                         ;
  12.                 }
  13.         }
  14.         return 0                                                                      ;
  15. }
复制代码

        编译、运行实况:
  1. C:\Bin>g++ -o x x.c

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

  4. C:\Bin>
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

sqert
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

  1. #include <stdio.h>

  2. void main()
  3. {
  4.         int x, a, b,tidai1, tidai2;
  5.        
  6.         x=a=b=tidai1 = tidai2 = 0;
  7.         while (tidai1+tidai2!=2)
  8.         {
  9.                 a=b=tidai1 = tidai2 = 0;
  10.                 while (a < x + 100)
  11.                 {
  12.                         if (a*a == x + 100)
  13.                         {
  14.                                 tidai1 = 1;
  15.                         }
  16.                         a++;
  17.                 }
  18.                 while (b < x + 168)
  19.                 {
  20.                         if (b*b == x + 168)
  21.                         {
  22.                                 tidai2 = 1;
  23.                         }
  24.                         b++;
  25.                 }
  26.                 x++;
  27.         }

  28.         printf("%d\n", x-1);
  29. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

想问一个问题,两个分号之间的条件是k任意取吗?
        for(k = 0 ;; k ++)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

      是放弃判断的意思,你没看到循环体里有 break 语句吗,这么循环的逻辑就是,循环,直到找到这个数为止。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

如果找到了符合条件的数,那之后的数是不是就没法判断了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

使用道具 举报

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

确实没有,再问一个,你那个break应该可有可无吧
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

      如果没有真的可以吗?
      真的可以吗?
      真的可以吗?
      
      真的不可以!!!
      如果没有 break 就是死循环!
小甲鱼最新课程 -> https://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) ;                                                                        
                }
        }
}
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

      是得出答案了,可是,你的程序呢,是不是就死了?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-9 09:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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