超级甲鱼粉 发表于 2019-11-10 23:27:09

c语言小新求助

想求一个只用循环结构和条件语句的结构,要求是:求个数x,x加100是一个完全平方数,再加168还是一个完全平方数,输出这个数。实在想不出来了,求助谢谢。

jackz007 发表于 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>

qcyQCY 发表于 2019-11-11 12:40:18


sqert

倒戈卸甲 发表于 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);
}

liuyanxiong 发表于 2019-11-13 12:34:44

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

想问一个问题,两个分号之间的条件是k任意取吗?
      for(k = 0 ;; k ++)

jackz007 发表于 2019-11-13 13:16:10

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

      是放弃判断的意思,你没看到循环体里有 break 语句吗,这么循环的逻辑就是,循环,直到找到这个数为止。

liuyanxiong 发表于 2019-11-13 20:08:05

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

如果找到了符合条件的数,那之后的数是不是就没法判断了

jackz007 发表于 2019-11-13 20:11:48

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

   难道你还想找出多个?我试过,只能找到 1 个,不信的话,你把 break 去掉,在 for 语句中,补上 k 的循环上限自己试试看。

liuyanxiong 发表于 2019-11-13 20:20:50

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

确实没有,再问一个,你那个break应该可有可无吧

jackz007 发表于 2019-11-13 20:25:51

liuyanxiong 发表于 2019-11-13 20:20
确实没有,再问一个,你那个break应该可有可无吧

      如果没有真的可以吗?
      真的可以吗?
      真的可以吗?
      
      真的不可以!!!
      如果没有 break 就是死循环!

liuyanxiong 发表于 2019-11-14 12:43:17

jackz007 发表于 2019-11-13 20:25
如果没有真的可以吗?
      真的可以吗?
      真的可以吗?


可是我得出答案了{:10_291:}
#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) ;                                                                        
                }
      }
}

jackz007 发表于 2019-11-14 13:01:51

liuyanxiong 发表于 2019-11-14 12:43
可是我得出答案了
#include
#include


      是得出答案了,可是,你的程序呢,是不是就死了?
页: [1]
查看完整版本: c语言小新求助